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 致命错误:调用非对象上的成员函数 getTitle()

使用不同夹具的其他模型的其他测试没有任何问题,但使用与此模型测试用例相同的夹具的测试失败。

如果我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

如果我运行查询,它会返回正确的结果,所以问题不在于数据库。

当我尝试从夹具访问项目时,为什么值为 NULL?

4

1 回答 1

0

我遇到了同样的问题,解决方案是默认范围“阻止”了它。

在 mysql 中,我将属性的默认属性设置为零,但默认范围条件是$t.'attribute' = 1. 可能你有一个类似的问题......

于 2013-04-29T15:15:54.300 回答