我有以下测试文件
<?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?
答案 0 :(得分:0)
我有同样的问题,解决方案是默认范围“阻止”它。
在mysql中,我将属性的默认属性设置为零,但默认范围条件为$t.'attribute' = 1
。可能你有一个类似的问题...