

CakePHPv2.5.5でUnitTestを行っています。

**構成**

databases.php

[code]

    public $xxxx = array(
        // ...
    );
    public $test_xxxx = array(
        'datasource' => 'Database/MysqlExportDb',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => 'root',
        'database' => 'test',
        'prefix' => '',
        'encoding' => 'utf8',
    );
    
[/code]

Fixture定義

[code]

    class KeywordFixture extends CakeTestFixture
    {
        public $useDbConfig = 'test_xxxx';
    
        public $fields = array(...);
    
        public $records = array(...);
    }
    
[/code]

テストコード側

[code]

    class ShellTest extends CakeTestCase
    {
        public $fixtures = array(
            'plugin.search_export.keyword',
        );
    ...
    
[/code]

**現象１**

keywordsテーブルが存在しない状態でテストを実行すると以下のエラーが発生します。

> MissingTableException: Table keywords for model Keyword was not found in
> datasource test_xxxx.

**現象２**

手動でkeywordsテーブルを作成して実行を行うと、テストが正しく実行された後keywordsテーブルが消滅します。

**質問**

現象２でテーブルが消えていることから何らかの形でFixtureは認識されていると考えています。  
しかしテーブルの生成が行われない原因が分かりません。  
考えられる原因を教えてください。

<https://book.cakephp.org/2.0/ja/development/testing.html#id15>


CC BY-SA 3.0
2017-11-24T07:43:43.320
39803
2018-01-19T09:46:49.643
2018-01-19T09:46:49.643
7566
7566
question
cakephp phpunit
CakePHPのFixtureにおいてテーブルの生成が行われない


`useDbConfig` を指定されていることから、以下の現象ではないでしょうか。

> 結論:  
>  FixtureのuseDbConfigでDataSourceを指定するには、対になるDataSourceが定義されてないと駄目でした。  
>  例)  
>  $test_hoge = array(/* ... _/); なら $hoge = array(/_ ... */);  
>  が定義されてないと駄目。

CakePHP の $useDbConfig にはまった(備忘録) - nmtysh.log
<http://nmtysh.hatenablog.com/entry/2013/11/27/005000>


CC BY-SA 3.0
2017-11-27T03:27:44.847
39875
2017-11-27T03:27:44.847
2668
39803
answer