2017-01-12 4 views
2

Извините, может быть, глупый вопрос, но я не могу найти ответ через поисковый запрос.Приемочный тест на принятие кода с приборами в yii2

Мой вопрос: Я создал файл TaskCest.php под бэкэндом \ акцепта, В этом файле уже после объявления

use yii\test\FixtureTrait; 
    public function fixtures() { 
     return ['tasks' => TasksFixture::className()]; 
    } 

У меня есть этот класс арматуры с данными в каталоге данных.

Но когда я запускаю скрипт я получаю следующее сообщение об ошибке:

[yii\base\ErrorException] ltrim() expects parameter 1 to be string, object given 

ошибка очевидна, но я не могу понять, в файле yii2 \ Test \ FixtureTrait.php: 145 У меня есть функция, которая ожидает имя параметра будет строка, но объект передается автоматически [я не звоню в getFixture]. В чем проблема. Кто-то сталкивался с тем же?

-vvv выход

Тестовые испытания/прием/TaskCest.php: getFixture

[yii\base\ErrorException] ltrim() expects parameter 1 to be string, object given 

/home/nginx/www/planning-back/vendor/codeception/codeception/src/Codeception/Lib/Di.php:123 
/home/nginx/www/planning-back/vendor/codeception/codeception/src/Codeception/Lib/Di.php:123 
/home/nginx/www/planning-back/vendor/codeception/codeception/src/Codeception/Test/Cest.php:136 
/home/nginx/www/planning-back/vendor/codeception/codeception/src/Codeception/Test/Cest.php:148 
/home/nginx/www/planning-back/vendor/codeception/codeception/src/Codeception/Test/Cest.php:82 
/home/nginx/www/planning-back/vendor/codeception/codeception/src/Codeception/Test/Test.php:90 
/home/nginx/www/planning-back/vendor/phpunit/phpunit/src/Framework/TestSuite.php:728 
/home/nginx/www/planning-back/vendor/codeception/codeception/src/Codeception/PHPUnit/Runner.php:98 
/home/nginx/www/planning-back/vendor/codeception/codeception/src/Codeception/SuiteManager.php:154 
/home/velaro/.config/composer/vendor/codeception/codeception/src/Codeception/Codecept.php:183 
/home/velaro/.config/composer/vendor/codeception/codeception/src/Codeception/Codecept.php:152 
/home/velaro/.config/composer/vendor/codeception/codeception/src/Codeception/Command/Run.php:282 
/home/velaro/.config/composer/vendor/symfony/console/Command/Command.php:255 
/home/velaro/.config/composer/vendor/symfony/console/Application.php:829 
/home/velaro/.config/composer/vendor/symfony/console/Application.php:191 
/home/velaro/.config/composer/vendor/symfony/console/Application.php:122 
/home/velaro/.config/composer/vendor/codeception/codeception/src/Codeception/Application.php:103 
/home/velaro/.config/composer/vendor/codeception/codeception/codecept:34 
+0

Можно проверить или вставить стек ошибок? Я не могу найти, откуда вы это взяли. – Bizley

+0

Запустите кодировку с '--debug' для стека. – Bizley

+0

Это так же, как я напечатал красным цветом, без стека, даже если я запускаю с опцией отладки – Velaro

ответ

1

Codeception признают методы Черта как тесты (это поиск все публичные методы Cest -класса включают методы Черта и запустить его). Вы должны извлечь признак в другой класс FixtureLoader и включить его в свой файл Cest.

class FixtureLoader 
{ 
    use \yii\test\FixtureTrait; 

    public $fixtures; 

    public function fixtures() 
    { 
     return $this->fixtures; 
    } 
} 

abstract class ApiCest 
{ 
    /** 
    * @var FixtureLoader 
    */ 
    protected $fixtureLoader; 

    public function __construct() 
    { 
     $this->fixtureLoader = new FixtureLoader(); 
    } 

    protected function fixtures() 
    { 
     return []; 
    } 

    public function _before(\FunctionalTester $I) 
    { 
     $this->fixtureLoader->fixtures = $this->fixtures(); 
     $this->fixtureLoader->loadFixtures(); 
    } 

    public function _after(\FunctionalTester $I) 
    { 
     $this->fixtureLoader->unloadFixtures(); 
    } 
} 


class UserCest extends ApiCest 
{ 
    protected function fixtures() 
    { 
     return [ 
      'users' => UserFixture::className(), 
     ]; 
    } 

    public function testSomething(\FunctionalTester $I) 
    { 
     $I->sendGET('/user'); 
     $I->seeResponseCodeIs(200); 
    } 
}