Класс WithFaker
Класс WithFaker используется в тестах Laravel для генерации фейковых данных с помощью библиотеки Faker. Он подключается как трейт к тестовому классу и предоставляет свойство $this->faker, которое позволяет создавать реалистичные тестовые данные. Это особенно полезно при написании тестов, где требуется большое количество разнообразных данных.
Синтаксис
<?php
use Illuminate\Foundation\Testing\WithFaker;
class ExampleTest extends TestCase
{
use WithFaker;
public function test_example()
{
$name = $this->faker->name();
$email = $this->faker->unique()->safeEmail();
$text = $this->faker->text(200);
}
}
?>
Пример
Создадим тест для проверки создания пользователя с использованием фейковых данных:
<?php
use App\Models\User;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class UserTest extends TestCase
{
use RefreshDatabase, WithFaker;
public function test_user_creation()
{
$data = [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'password' => 'password123',
];
$user = User::create($data);
$this->assertDatabaseHas('users', [
'email' => $data['email']
]);
}
}
?>
Пример
Сгенерируем различные типы фейковых данных для тестирования модели Article:
<?php
use App\Models\Article;
use Illuminate\Foundation\Testing\WithFaker;
class ArticleTest extends TestCase
{
use WithFaker;
public function test_article_validation()
{
$article = Article::create([
'title' => $this->faker->sentence(6),
'content' => $this->faker->paragraphs(3, true),
'slug' => $this->faker->slug(),
'views' => $this->faker->numberBetween(1, 1000),
'is_published' => $this->faker->boolean(80),
'published_at' => $this->faker->dateTimeBetween('-1 year', 'now'),
]);
$this->assertModelExists($article);
}
}
?>
Пример
Используем фейковые данные в HTTP-тестах для проверки API-эндпоинтов:
<?php
use App\Models\User;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ApiTest extends TestCase
{
use RefreshDatabase, WithFaker;
public function test_user_registration_api()
{
$userData = [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'password' => 'password123',
'password_confirmation' => 'password123',
];
$response = $this->postJson('/api/register', $userData);
$response->assertStatus(201)
->assertJsonPath('user.email', $userData['email']);
}
}
?>
Пример
Создадим несколько записей с помощью фабрики и фейковых данных:
<?php
use App\Models\Post;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class PostTest extends TestCase
{
use RefreshDatabase, WithFaker;
public function test_posts_list()
{
Post::factory()
->count(5)
->create([
'title' => $this->faker->sentence(),
'content' => $this->faker->text(500),
]);
$posts = Post::all();
$this->assertCount(5, $posts);
foreach ($posts as $post) {
$this->assertNotEmpty($post->title);
$this->assertNotEmpty($post->content);
}
}
}
?>
Смотрите также
-
класс
TestCase,
который является базовым для всех тестов -
трейт
RefreshDatabase,
который сбрасывает базу данных между тестами -
класс
Factory,
который создаёт фабрики для моделей -
метод
create,
который создаёт записи с помощью фабрик