Приборы для юнит-тестов Yii недоступны в тестах - PullRequest
2 голосов
/ 18 января 2012

конфиг / 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');

Вывод: «Неизвестное свойство« entity »для класса« EntityTest »». Класс тестирования - «Entity», имя таблицы в базе данных - «tbl_entity», опция «tablePrefix» компонента «CDbConnection» установлена ​​в «tbl _»

Ответы [ 4 ]

5 голосов
/ 13 апреля 2013

Пошли некропостить!:)

Ваша проблема заключается в именовании файла в фикстурах.Вы упоминаете, что это tests/fixtures/Entity.php, которое должно быть после имени вашего Model , класса, но на самом деле файлы в папке fixtures должны быть названы в честь tableName s ваших моделей.Я считаю, что реальное имя таблицы для вашей Entity модели - entity (все в нижнем регистре), поэтому просто переименуйте файл.У меня была похожая проблема несколько раз, и решение четко указано в документации: "Приспособление представляется в виде PHP-скрипта, имя которого (без суффикса) совпадает с именем таблицы (если имя схемы необходимо,перед именем таблицы должен стоять префикс). "

2 голосов
/ 25 декабря 2013

Также попробуйте , если вы используете метод setUp () . Просто вызовите parent :: setUp (), когда вы переопределяете его своим собственным методом.

1 голос
/ 13 февраля 2013
$entity = $this->entities['entity1']; // returns an array
$entity = $this->entities('entity1'); // returns an active record
0 голосов
/ 21 мая 2013

Взгляните на это решение Проблема с Yii Fixtures? Я тоже придумал ту же проблему. Я пропускаю класс, чтобы расширить, не забудьте расширить CDbTestCase.

...