Ошибка addError() + config test.php

Всё про тестирование в Yii 2.0
Ответить
templton
Сообщения: 4
Зарегистрирован: 2017.02.05, 19:09

Ошибка addError() + config test.php

Сообщение templton »

Здравствуйте!
Использую YII2_basic + codeception
Только начал изучать тестирование. Взялся за функциональные/приемочные тесты. В принципе все хорошо, все работает. Но до первого не выполнения теста.
Если какой-то шаг теста возвращает ошибку, например, $I->see(...), то вместо сообщения, что, например, нет такого-то селектора на странице

Код теста:

Код: Выделить всё

class ContactFormCest 
{
    public function _before(\FunctionalTester $I)
    {
        $I->amOnPage(['site/contact']);
    }

    public function openContactPage(\FunctionalTester $I)
    {
        $I->see('Contact', 'WRONG_SELECTOR');     
    }

}


я получаю Fatal Error такого содержания:

Код: Выделить всё

FATAL ERROR. TESTS NOT FINISHED.
Call to undefined method Codeception\Test\Metadata::addReport() 
in C:\Users\Dima\AppData\Roaming\Composer\vendor\codeception\codeception\src\Codeception\Lib\InnerBrowser.php:65
<pre>PHP Fatal Error &#039;yii\base\ErrorException&#039; with message &#039;Call to undefined method Codeception\Test\Metadata::addReport()&#039; 

in C:\Users\Dima\AppData\Roaming\Composer\vendor\codeception\codeception\src\Codeception\Lib\InnerBrowser.php:65

Stack trace:
#0 [internal function]: yii\base\ErrorHandler-&gt;handleFatalError()
#1 {main}</pre>
В классе Metadata, конечно же, эта функция есть.

Методом тыка устранил ошибку так: В файле YII_root/tests/_bootstrap.php закомментировал строчку:
//require __DIR__ .'/../vendor/autoload.php';

Это комментируется хз какой-то файл от composer.

Но вот теперь мне нужно использовать yii2_users
В конфиге web.php у меня есть такой кусок:

Код: Выделить всё

 'modules' => [
        'user' => [
            'class' => 'dektrium\user\Module',
            'admins' => ['admin'],
            'controllerMap' => [
                'registration' => [
                    'class' => 'dektrium\user\controllers\RegistrationController',
                    'on ' . \dektrium\user\controllers\RegistrationController::EVENT_AFTER_REGISTER => function ($event) {
                        \app\components\Userevents::after_registration($event);
                    }
                ],
                'settings' => 'app\controllers\user\SettingsController',
            ],
        ],
И если я этот кусок копирую в конфиг test.php, то codeception начинает материться, что не может найти класс
\dektrium\user\controllers\RegistrationController

Вопросы:
1. Правильно ли я победил появление ошибки addError()? Может из-за комментирования этой строки и вторая проблема появляется...
2. Если я победил п.1 правильно, то как составить конфиг test.php, чтобы работали все дополнительные установленные расширения
templton
Сообщения: 4
Зарегистрирован: 2017.02.05, 19:09

Re: Ошибка addError() + config test.php

Сообщение templton »

Итак, по старой доброй традиции, утопающему может помочь только сам утопающий.

Может кто предложит идею по-лучше, но у меня заработало и я тем доволен!

Скопировал с заменой из оригинального набора правильные файлы: tests/ и файл codeception.yml.

1. codeception глобально не ставим. Удалил: composer global remove codeception
2. Открываем readme basic шаблона:

Код: Выделить всё

1. Rename `tests/acceptance.suite.yml.example` to `tests/acceptance.suite.yml` to enable suite configuration

2. Replace `codeception/base` package in `composer.json` with `codeception/codeception` to install full featured
   version of Codeception

3. Update dependencies with Composer 

    ```
    composer update  
    ```
4. Download [Selenium Server](http://www.seleniumhq.org/download/) and launch it:

    ```
    java -jar ~/selenium-server-standalone-x.xx.x.jar
    ``` 

5. (Optional) Create `yii2_basic_tests` database and update it by applying migrations if you have them.

   ```
   tests/bin/yii migrate
   ```

   The database configuration can be found at `config/test_db.php`.


6. Start web server:

    ```
    tests/bin/yii serve
    ```
Пункт 4 я не делал.
Еще у меня в composer.json от моих ли махинаций или хз от чего перед codeception было
yiisoft/yii-codeception - как-то так. Удалил.
codeception/base - это в разделе dev. Я не сразу увидел.

Все. После этого из config/web.php скопировать данные components и modul в файл test.php. Ну. и test_db - поставить правильные данные. И все! Пошло, как по маслу.


Кстати, ошибка addError() пропала после того, как я сделал composer update. Файл autoload.php в папке vendor стал работать правильно. Вот когда только сделал, понимал, почему. А сейчас забыл)) Но это все равно проблему на тот момент не решило.
Вывод я для себя сделал такой: если с вещью (в данном случае с YII2) идет инструкция (readme), то ее надо прочитать. И только после того, как полностью ее понял, можно лезть на форумы, если чего-то не понятно. Но вот только, где в таком случае будет проявляться русская душа - смотреть инструкцию только после того, как все сломано? :D
Ответить