proudmore
@proudmore

Как использовать созданный из Codeception объект приложения при сложном приемочном тестировании?

Здравствуйте. Вопрос вот в чем. Начал писать приемочные тесты для Yii2 приложения.
Наткнулся на следующее:

public function landToFirstEnterApplication(AcceptanceTester $I)
    {
        /** @var UrlManager $urlManager */
        $urlManager = Yii::$app->get('frontendUrlManager');

        $I->amOnUrl($urlManager->getHostInfo());
        $I->see('Авторизация');

        $I->click('Зарегистрироваться');
        $I->see('Зарегистрироваться');
        $I->fillField(['id' => 'emailform-email'], $userEmail = 'tester@example.com');
        $I->click('Продолжить');
        $I->waitForText('Вернуться на главную страницу', 2);

        $I->seeEmailIsSent(1);
        /** @var Message $mail */
        $mail = $I->grabLastSentEmail();
        expect($mail->getTo())->hasKey($userEmail);

        $link = $this->getLink($mail->getSwiftMessage()->getChildren()[0]->getBody());
        $I->amOnUrl($link);
        $I->see('Установить пароль');

    }


Тест падает на $I->seeEmailIsSent(1);

Так происходит, потому что в текущем экземпляре Yii::$app, созданном внутри теста, используется тестовая заглушка из Codeception, которая кладет все письма к себе в приватный массив.
Потом с этим массивом работает метод seeEmailIsSent и все, что рядом с ним.

А сам $I сейчас использует объект приложения, просто созданный из тестового конфига, в котором mailer не заменяется на класс из Codeception.

Собственно, вопрос: как писать тест так, чтобы использовался Yii::$app из теста, а не созданный при запросе?

acceptance.suite.yml

actor: AcceptanceTester
modules:
enabled:
- WebDriver:
url: 127.0.0.1:44444
browser: chrome
- Yii2:
configFile: 'common/config/test-local.php'
part:
- email
- ORM
- Fixtures
- init
cleanup: false
transaction: false
recreateApplication: true

  • Вопрос задан
  • 171 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы