Yii单元测试在测试中无法访问的灯具

时间:2012-01-17 21:33:22

标签: php unit-testing yii phpunit

配置/ test.php的

'components'=>array(
    'fixture'=>array(
        'class'=>'system.test.CDbFxtureManager'
    ),
),

tests / unit / EntityTest.php(扩展CDbTestCase)

public $fixtures = array('entities'=>'Entity'),

测试/装置/ Entity.php

return array(
    'entity1'=>array('slug'=>'slug1', 'title'=>'title1'),
    'entity2'=>array('slug'=>'slug2', 'title'=>'title2'),
);

现在,在EntityTest类中,我尝试获取实体

$entities = $this->entities;
$entity = $this->entities('entity1');

输出为“未知属性”实体“用于类”EntityTest“'。测试类是'Entity',数据库中的表名是'tbl_entity','tablebrefix'选项'CDbConnection'组件设置为'tbl _'

4 个答案:

答案 0 :(得分:5)

我们去尸体吧! :)

您的问题是在灯具中命名文件。你提到它是tests/fixtures/Entity.php,它应该在你的 Model 类的名字后面,但事实上,fixtures文件夹中的文件应该以{{1​​}命名你的模特。我相信您的tableName模型的真实表名是Entity(全部为小写),因此只需重命名该文件即可。我有过几次类似的问题,解决方案在文档中明确说明:"A fixture is represented as a PHP script whose name (without suffix) is the same as the table name (if schema name is needed, it should be prefixed to the table name)."

答案 1 :(得分:2)

同时尝试this if you are using setUp() method。当你用自己的方法重新定义它时,只需调用parent :: setUp()。

答案 2 :(得分:1)

$entity = $this->entities['entity1']; // returns an array
$entity = $this->entities('entity1'); // returns an active record

答案 3 :(得分:0)

看看这个解决方案Yii Fixtures Issue?我也提出了同样的问题。我忽略了要扩展的类,确保扩展CDbTestCase。