0

次のテストファイルがあります

<?php

class DisplayAlbumTest extends CDbTestCase
{

  public $fixtures = array(
    'displayalbums' => 'DisplayAlbum',
    'displayphotos' => 'DisplayPhoto',
  );

  /**
   * Get title
   * 
   * @group v1.0
   * @group now
   */
  public function testGetTitle()
  {
    $oAlbum = $this->displayalbums('get_title');

    var_dump($oAlbum);

    die('nope!');

    $this->assertEquals('Get title test', $oAlbum->getTitle());
  }

}

および関連するフィクスチャ ファイル

<?php
return array(
  'get_title' => array(
    'title' => 'Get title test'
  )
);

そして次の設定

<?php
Yii::setPathOfAlias('api', '../api/');

return CMap::mergeArray(
  require(dirname(__FILE__).'/main.php'),
  array(
    'components'=>array(
      'fixture'=>array(
        'class'=>'system.test.CDbFixtureManager',
      ),
      /* uncomment the following to provide test database connection
      'db'=>array(
        'connectionString'=>'DSN for test database',
      ),
      */
      'db'=>$TEST_DB_SETTINGS,
    ),
  )
);

テストの実行時にデータがデータベースに挿入されますが、var_dump印刷されNULLます。モデルのメソッドにアクセスしようとすると、次のエラーが発生します (NULL のメソッドにアクセスしようとしているため) PHP Fatal error: Call to a member function getTitle() on a non-object

フィクスチャが異なる他のモデルの他のテストは問題なく動作しますが、このモデルのテスト ケースと同じフィクスチャを使用するテストは失敗します。

テスト内で行うvar_dump($this->displayalbums)と、次の結果が得られます。

array(1) {
  ["get_title"]=>
  array(2) {
    ["title"]=>
    string(14) "Get title test"
    ["displayalbumid"]=>
    string(1) "1"
  }
}

配列からのデータを使用して新しいオブジェクトを作成し、メソッドをテストすることはできますが、それはすべてのテストを書き直す必要があることを意味し (このファイルの他のものはこれが原因で失敗しています)、このメソッドを他の失敗しないテスト。

MySQL ログを調べたところ、最後に実行されたクエリは、必要なアルバムを選択するクエリでした。

SELECT * FROM `DisplayAlbum` `t` WHERE `t`.`displayalbumid`=60 LIMIT 1

クエリを実行すると、適切な結果が返されるため、DB に問題はありません。

フィクスチャから項目にアクセスしようとすると値が NULL になるのはなぜですか?

4

1 に答える 1