我有以下测试文件
<?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?