@heahoh
Full stackoverflow developer

Codeception acceptance — аннотации before, after, depends не работают, в чем может быть проблема?

Использую Codeception версии 2.2.4.
Не хочу полагаться на волю случая при выполнении теста и пытаюсь указать зависимости тестов между собой и порядок выполнения с помощью аннотаций:
class TsdPricetagCest extends ValidateFormCest
{
    public function _before(AcceptanceTester $I)
    {
        $I->login();
    }

    public function _after(AcceptanceTester $I)
    {
    }

    /**
     * в конце теста сохраняет валидные значения
     * @example {"importFilesDestinationFolder":{"type":"path", "value":"C:\\tmp\\tsd\\import"}, "archiveExpirationDate":{"type":"day", "min":1, "max":365, "value":1}, "archiveDestinationFolder":{"type":"path", "value":"C:\\tmp\\tsd\\archive"}, "logsDestinationFolder":{"type":"path", "value":"C:\\tmp\\tsd\\logs"}}
     * @param AcceptanceTester     $I
     * @param \Codeception\Example $example
     */
    public function testSettingsValidation(AcceptanceTester $I, \Codeception\Example $example)
    {
        $I->wantTo('test settings validation');
        $I->amOnPage('index.php?r=tsd/settings/index');
        $I->waitForElement(\Codeception\Util\Locator::contains('h1', 'Настройки'));

        $this->testFormValidation($I, 'TsdPricetagForm', $example);

        $I->wantTo('test template alias validation');
        $I->click(Locator::contains('#content_templatesCollapseable a', 'Добавить шаблоны'));
        $I->waitForElementVisible('#templatesDialog', $I::TIMEOUT);
        $I->click(Locator::elementAt('#templatesGrid .items tbody tr', 1));
        $I->seeCheckboxIsChecked('#checkboxTemplatesColumn_0');

        $I->click('#templateDialogSelect');
        $I->waitForElementNotVisible('#templatesDialog');

        $I->waitForElement('#templatesCollapseable div.ym-grid');

        $fieldSelector = '#templatesCollapseable div.ym-grid input[type="text"]';
        $templateFieldValidator = $this->validationHelper->createValidator($fieldSelector, array('type' => 'length', 'min' => 1, 'max' => 1, 'value' => 1));
        $templateFieldValidator->isSelectorXPath = true;
        $templateFieldValidator->validateWithSubmit = true;
        $templateFieldValidator->submitButton = '#save';
        $templateFieldValidator->validate($I);

        $I->wait($I::WAIT_A_SEC);
    }

    /**
     * @param AcceptanceTester $I
     */
    public function testSettingsSaveCorrectly(AcceptanceTester $I)
    {
        $I->wantTo('test settings validation');
        $I->amOnPage('index.php?r=tsd/settings/index');

        $I->seeInField('#TsdPricetagForm_importFilesDestinationFolder', 'C:\tmp\tsd\import');
        $I->seeInField('#TsdPricetagForm_archiveExpirationDate', '1');
        $I->seeInField('#TsdPricetagForm_archiveDestinationFolder', 'C:\tmp\tsd\archive');
        $I->seeInField('#TsdPricetagForm_logsDestinationFolder', 'C:\tmp\tsd\logs');
        $I->seeInField('#templatesCollapseable .ym-grid input[type="text"]', '1');
    }
}


Тест с проверкой настроек должен выполняться после выполнения testSettingsValidation и зависит от него.
Указывая
/**
     * @depends testSettingsValidation
     * @param AcceptanceTester $I
     */
    public function testSettingsSaveCorrectly(AcceptanceTester $I)

Тест помечается как skipped и не выполняется, вывод консоли такой:
SKIPPED: Dependent test for OperationalActivity\TsdPricetagCest:testSettingsValidation not found

Указывая
/**
     * @depends  OperationalActivity\TsdPricetagCest::testSettingsValidation
     * @param AcceptanceTester $I
     */
    public function testSettingsSaveCorrectly(AcceptanceTester $I)

вижу:
SKIPPED: This test depends on OperationalActivity\TsdPricetagCest::testSettingsValidation to pass
хотя до этого тест был выполнен

При указании @after или @before получаю ошибки dependecyInjector'а, непонятно откуда появляющиеся (дебаг внутри библиотеки не внес ясности)

Может кто сталкивался, подскажите, где я сделал ошибку
  • Вопрос задан
  • 801 просмотр
Решения вопроса 1
@heahoh Автор вопроса
Full stackoverflow developer
Как оказалось использовать аннотации before, after вместе с инжекцией example не работает - без них аннотации прекрасно работают.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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