Страница 1 из 1

После тестирования удаляются записи из user

Добавлено: 2020.09.30, 07:10
Arhat109
Поставил advanced шаблон, в migrate создал доп. табличку и миграцию, которая добавляет юзверей по умолчанию: admin, test1,test2 чтобы были сразу. Выполнил по инструкции настройку тестов и провел их нормально. Все исходные тесты проходят штатно.

Добавил свой функциональный тест для тестирования бэкенда (класс а-ля калькулятор)

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

<?php

namespace backend\tests\functional;

use backend\tests\FunctionalTester;
use common\fixtures\CalculatorFixture;
use common\models\User;

/**
 * Class LoginCest
 */
class CalculatorCest
{
    /**
     * Load fixtures before db transaction begin
     * Called in _before()
     * @see \Codeception\Module\Yii2::_before()
     * @see \Codeception\Module\Yii2::loadFixtures()
     * @return array
     */
    public function _fixtures()
    {
        return [
            'calculator' => [
                'class' => CalculatorFixture::class,
//                'dataFile' => codecept_data_dir() . 'login_data.php'
            ]
        ];
    }
    
    /**
     * @param FunctionalTester $I
     */
    public function calcCorrect(FunctionalTester $I)
    {
        $I->amLoggedInAs($I->grabRecord(User::class, ['username' => 'admin']));
        $I->amOnPage('/test1/add?iiduser=1&a=2&b=4&c=8');

        $I->see('{"a":2,"b":4,"c":8,"r":1}');
    }
}
и .. внезапно обнаружил что бэк не может подключится методом amLoggedInAs() т.к. табличка user в тестовой базе - пуста. Снес, накатил миграции заново. Все равно тест не проходит. Пишет:

Test tests/functional/CalculatorCest.php:calcCorrect
Step See "{"a":2,"b":4,"c":8,"r":1}"
Fail Failed asserting that on page /test1/add?iiduser=1&a=2&b=4&c=8
--> My Yii Application Toggle navigation My ApplicationHome Logout (admin) Congratulations! You have successfully created your Yii-powered application. Get started with Yii Heading Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqu
[Content too long to display. See complete response in '/home/arhat109/PhpstormProjects/test1/backend/tests/_output/' directory]
--> contains "{"a":2,"b":4,"c":8,"r":1}".

За первой стрелкой как понимаю, то что оно получил со страницы, т.к. не залогировался как админ. Страница по адресу amOnPage() должна отдавать JSON, что ниже и она его отдает при ручном запуске.

Что я делаю "не так"? И почему КАЖДЫЙ РАЗ надо сносить тестовую БД и накатывать миграции повторно, т.к. таблица users кем-то очищается, но не могу найти кем? В настройках шаблонов, конфигурациях нигде за это ничего не указано.. это где-то "во внутрях" тестера от Yii2? Как исправить?

Всегда считал что автоматическое тестирование - ЗЛО, и тупо способ прикрыть свою Ж* .. теперь уже в этом просто уверен..

Re: После тестирования удаляются записи из user

Добавлено: 2020.09.30, 07:53
Arhat109
Никто не подскажет почему шаблонные тесты бэкенда затирают табличку users в тестовой БД? Как это отключить?

запускаю так: ./vendor/bin/codecept run -- -c backend из каталога проекта в терминале Phpstorm.

Re: После тестирования удаляются записи из user

Добавлено: 2020.09.30, 08:32
yiijeka
Для тестового окружения нужно указывать свои настройки БД. Похоже у вас они совпадают с настройками от рабочей БД.

https://github.com/yiisoft/yii2-app-adv ... -local.php

Re: После тестирования удаляются записи из user

Добавлено: 2020.09.30, 08:50
Arhat109
Да, указана отдельная тестовая СУБД, в ней и зачищается табличка юзверей, из-за чего тест выше не проходит повторно: "не удалось вытащить юзверя admin" .. он не проходит и первый раз, но там ошибки, с которыми постепенно разбираюсь, ибо осваиваю как раз автотестирование (на старости лет) .. но каждый раз перед тестом накатывать тестовую СУБД, честно говоря уже достало!

Понимаю что это неправильно .. как поправить?

Re: После тестирования удаляются записи из user

Добавлено: 2020.09.30, 10:11
Arhat109
Так, нашел, дебаггингом кода вот такое:

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

    /**
     * Initialize the fixtures.
     * @since 2.0.12
     */
    public function initFixtures()
    {
        $this->unloadFixtures();
        $this->loadFixtures();
    }
Кмк, это надо отлить в граните .. т.к. метод unloadFixture() .. тупо делает truncate на указанную таблицу! Просто круть ..

Re: После тестирования удаляются записи из user

Добавлено: 2020.10.01, 14:35
Arhat109
Вопрос можно закрыть, всем спасибо, разобрался.