Как оптимизировать Feature tests Laravel?
Ниже в коде у меня повторяется код а именно:
1 Artisan::call('passport:install');
2 регистрация
2 авторизация
Писали что тесты не должны быть зависимыми поэтому сделал каждый независимым
но может как то можно или нужно переиспользовать код?
<?php
declare(strict_types=1);
namespace Tests\Feature;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class AuthTest extends TestCase
{
use RefreshDatabase;
/**
* Register user.
*
* @return void
*/
public function test_register(): void
{
$response = $this->post('api/auth/register', [
'name' => 'userone',
'email' => 'userone@mail.com',
'password' => 'password',
'password_confirmation' => 'password'
]);
$response->assertNoContent($status = 204);
}
/**
* Login.
*
* @return void
*/
public function test_login(): void
{
Artisan::call('passport:install');
$this->post('api/auth/register', [
'name' => 'userone',
'email' => 'userone@mail.com',
'password' => 'password',
'password_confirmation' => 'password'
]);
$response = $this->post('api/auth/login', [
'email' => 'userone@mail.com',
'password' => 'password',
'device_name' => 'Iphone 14 PRO MAX'
]);
$response->assertOk();
}
/**
* Logout.
*
* @return void
*/
public function test_logout(): void
{
Artisan::call('passport:install');
$this->post('api/auth/register', [
'name' => 'usertwo',
'email' => 'usertwo@mail.com',
'password' => 'password',
'password_confirmation' => 'password'
]);
$res = $this->post('api/auth/login', [
'email' => 'usertwo@mail.com',
'password' => 'password',
'device_name' => 'Iphone 14 PRO MAX'
]);
$dataToken = json_decode($res->getContent())->data;
$response = $this->post('api/auth/logout',
['token_id' => $dataToken->id],
['Authorization' => 'Bearer ' . $dataToken->token]
);
$response->assertNoContent($status = 204);
}
}
Источник: Stack Overflow на русском