Unit tests

Всё про тестирование в Yii 2.0
Ответить
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Unit tests

Сообщение bambiq »

Решил тестить апи с помощью юнит тестов и yii hhtp client. Столкнулся с проблемой хранения token'a, я решил поместить его в паблик свойства, но как понял для каждого тест метода создается свой экземпляр. Потом решил сделать статическую переменную, но и тут ничего не получается, почему со статиком проблема? Я понимаю, что это пхп подчищает походу, но почему?? Как хранить токен? Есть вариант создать один тестовый метод, а остальные будут просто как функции, которые я буду руками вызывать, но тоже такое себе. Ну ещё думал в начале каждого метода вызывать логин, но это затратно по ресурсам, нет?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Unit tests

Сообщение ElisDN »

bambiq писал(а):Решил тестить апи с помощью юнит тестов и yii hhtp client.
Зачем, если имеется готовое api suite? Юнит-тесты не для этого предназначены.
bambiq писал(а):Столкнулся с проблемой хранения token'a, я решил поместить его в паблик свойства, но как понял для каждого тест метода создается свой экземпляр. Потом решил сделать статическую переменную, но и тут ничего не получается, почему со статиком проблема? Я понимаю, что это пхп подчищает походу, но почему??
Тесты должны быть независимыми, чтобы спокойно запускаться в любом количестве и в любой последовательности. Для этого всё пересоздаётся для каждого теста.
bambiq писал(а):Как хранить токен? Есть вариант создать один тестовый метод, а остальные будут просто как функции, которые я буду руками вызывать, но тоже такое себе. Ну ещё думал в начале каждого метода вызывать логин, но это затратно по ресурсам, нет?
Впишите токен примо в фикстуру и используйте его.
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Unit tests

Сообщение bambiq »

ElisDN писал(а):
bambiq писал(а):Решил тестить апи с помощью юнит тестов и yii hhtp client.
Зачем, если имеется готовое api suite? Юнит-тесты не для этого предназначены.
bambiq писал(а):Столкнулся с проблемой хранения token'a, я решил поместить его в паблик свойства, но как понял для каждого тест метода создается свой экземпляр. Потом решил сделать статическую переменную, но и тут ничего не получается, почему со статиком проблема? Я понимаю, что это пхп подчищает походу, но почему??
Тесты должны быть независимыми, чтобы спокойно запускаться в любом количестве и в любой последовательности. Для этого всё пересоздаётся для каждого теста.
bambiq писал(а):Как хранить токен? Есть вариант создать один тестовый метод, а остальные будут просто как функции, которые я буду руками вызывать, но тоже такое себе. Ну ещё думал в начале каждого метода вызывать логин, но это затратно по ресурсам, нет?
Впишите токен примо в фикстуру и используйте его.
Я токен получаю после выполнения одного тест кейса, у меня не могут они быть независимые так как без логина ничего дальше работать не будет.
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Unit tests

Сообщение bambiq »

Я установил модуль Rest, но там доступно всего лишь 8 методов... Я не могу банально запрос отправить, хотя тест запускается успешно(проверял вардампом). Да и $I->wantTo() тоже работает........... Как с этим работать...
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Unit tests

Сообщение ElisDN »

bambiq писал(а):Я токен получаю после выполнения одного тест кейса, у меня не могут они быть независимые так как без логина ничего дальше работать не будет.
Этот токен при логине записывается в базу. Вот и заполните базу уже готовым токеном из фикстуры и посылайте уже его, как будто логин уже прошёл.

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

class ProfileCest
{
    private $userToken = 'xxxxxxx';
    ...
    
    public function testAccess(ApiTester $I)
    {
        $I->sendGET('/api/profile');
        $I->seeResponseCodeIs(401);
    } 
    
    public function testProfile(ApiTester $I)
    {
        $I->amBearerAuthenticated($this->userToken);
        $I->sendGET('/api/profile');
        $I->seeResponseCodeIs(200);
        $I->seeResponseContainsJson([
            'email' => 'mail@site.com',
        ]);
    }
}
Последний раз редактировалось ElisDN 2016.10.19, 16:40, всего редактировалось 1 раз.
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Unit tests

Сообщение bambiq »

ElisDN писал(а):
bambiq писал(а):Я токен получаю после выполнения одного тест кейса, у меня не могут они быть независимые так как без логина ничего дальше работать не будет.
Этот токен при логине записывается в базу. Вот и заполните базу уже готовым токеном из фикстуры и посылайте уже его, как будто логин уже прошёл.

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

class ProfileCest
{
    private $userToken = 'xxxxxxx';
    ...
    
    public function testAccess(ApiTester $I)
    {
        $I->sendGET(Url::to(['/api/profile']));
        $I->seeResponseCodeIs(401);
    } 
    
    public function testProfile(ApiTester $I)
    {
        $I->amBearerAuthenticated($this->userToken);
        $I->sendGET(Url::to(['/api/profile']));
        $I->seeResponseCodeIs(200);
        $I->seeResponseContainsJson([
            'email' => 'mail@site.com',
        ]);
    }
}
Я буду тестировать только логин, регистрацию не буду, а токен записывается только при регистрации. Мне просто создать тестового пользователя в базу и втулить ему свой токен, который потом записать в фикстуру и использовать фикстуру в тестах?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Unit tests

Сообщение ElisDN »

bambiq писал(а):Мне просто создать тестового пользователя в базу и втулить ему свой токен, который потом записать в фикстуру и использовать фикстуру в тестах?
Именно.
bambiq
Сообщения: 63
Зарегистрирован: 2016.08.14, 20:29

Re: Unit tests

Сообщение bambiq »

ElisDN писал(а):
bambiq писал(а):Мне просто создать тестового пользователя в базу и втулить ему свой токен, который потом записать в фикстуру и использовать фикстуру в тестах?
Именно.
Спасибо)
Ответить