@ildar-meyker

При тестировании стоит ли создавать пользователя в каждом тестовом методе, или существует более правильный подход?

Я пишу тесты, где проверяю имеют ли разного толка пользователи права на выполнение разного рода действий. Гость, авторизованный, админ и т.д. Cейчас это выглядит так.
class PostsCRUDTest extends TestCase
{
    public function test_guest_has_to_be_verified_user_when_gets_posts_create()
    {
        $response = $this->get('/posts/create');
        $response->assertRedirect('/email/verify');
    }

    public function test_authorised_user_has_to_be_verified_when_gets_posts_create()
    {
        $user = User::factory()->create([
            'email_verified_at' => null
        ]);
        $response = $this->actingAs($user)->get('/posts/create');
        $response->assertRedirect('/email/verify');
    }

    public function test_verified_user_succeeds_when_gets_posts_create()
    {
        $user = User::factory()->create();
        $response = $this->actingAs($user)->get('/posts/create');
        $response->assertStatus(200);
        $response->assertSee('Добавить пост');
    }
}

И начинает казаться, что лучше заготовить пользователей заранее. Могу ли я сделать это в свойствах класса и будет ли это в целом лучше?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@jazzus
В методе setUp тест-класса можно прописать начальные данные для всех тестов. Перед каждым тестом все объекты будут созданы с нуля, как и нужно делать. В указанном примере выносить юзера в сетап не нужно т.к. во всех трех тестах данные разные. Но, например неавторизованного юзера можно вынести в TestCase или трейты и вызывать getUnverifiedUser.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@k2lhu
Каждый тест должен проверять что-то одно, поэтому для проверки разных групп пользователей вы можете их заранее загрузить как вам угодно в методе
public function _before() {}
А сейчас у вас в тесте происходит и создание пользователя и выполнение POST-запроса на его получение его прав к чему-либо.
В тесте на проверку прав пользователя не должна падать ошибка создания пользователя, а сейчас у вас такая возможность зафейлить это дело есть.
Чем проще и короче тест - тем лучше и проще их писать, тем проще будет дописывать в дальнешем уже проверку какой-то логики вокруг базовых действия, в том числе и создания юзеров и проверки прав доступа.
Ответ написан
Ваш ответ на вопрос

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

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