Метод setUp
Метод setUp класса TestCase предназначен для подготовки окружения перед каждым тестом. Он выполняется автоматически перед запуском каждого тестового метода в классе. В этом методе можно инициализировать общие объекты, создавать тестовые данные, настраивать моки или подготавливать состояние приложения. Метод не принимает параметров и не возвращает значение.
Синтаксис
<?php
protected function setUp(): void
{
parent::setUp();
// Подготовка данных
}
?>
Пример
Давайте подготовим общие данные для тестирования работы с постами:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\Post;
use App\Models\User;
class PostTest extends TestCase
{
protected $user;
protected $post;
protected function setUp(): void
{
parent::setUp();
$this->user = User::factory()->create([
'name' => 'test_user'
]);
$this->post = Post::factory()->create([
'title' => 'test post',
'content' => 'test content',
'user_id' => $this->user->id
]);
}
public function test_post_belongs_to_user()
{
$res = $this->post->user->name;
echo $res;
}
}
?>
Результат выполнения кода:
"test_user"
Пример
Метод setUp можно использовать для настройки аутентифицированного пользователя для всех тестов:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class AuthTest extends TestCase
{
protected $user;
protected function setUp(): void
{
parent::setUp();
$this->user = User::factory()->create([
'email' => 'test@example.com',
'password' => bcrypt('password')
]);
}
public function test_authenticated_user_can_access_dashboard()
{
$res = $this->actingAs($this->user)
->get('/dashboard')
->status();
echo $res;
}
}
?>
Результат выполнения кода:
"200"
Пример
Пример использования setUp для создания нескольких моделей с помощью фабрик:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Post;
use App\Models\User;
class PostControllerTest extends TestCase
{
protected $user;
protected $posts;
protected function setUp(): void
{
parent::setUp();
$this->user = User::factory()->create();
$this->posts = Post::factory()
->count(5)
->create([
'user_id' => $this->user->id
]);
}
public function test_user_has_five_posts()
{
$res = $this->user->posts->count();
echo $res;
}
}
?>
Результат выполнения кода:
"5"
Смотрите также
-
метод
tearDown,
который выполняется после каждого теста -
класс
RefreshDatabase,
который обновляет базу данных для тестов -
метод
actingAs,
который аутентифицирует пользователя в тестах -
класс
Factory,
который используется для создания тестовых данных