РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1173 of 1392 menu

Класс TestCase

Класс TestCase является основой тестирования в Laravel. Все создаваемые тестовые классы должны наследовать его. Он предоставляет методы для взаимодействия с приложением, работы с базой данных, отправки HTTP-запросов и выполнения проверок утверждений. Основное предназначение этого класса - обеспечить удобную среду для написания и выполнения тестов.

Создание тестового класса

Для создания тестового класса используется artisan-команда make:test. После создания класс должен наследовать TestCase и содержать методы, начинающиеся с префикса test или использовать аннотацию @test.

<?php namespace Tests\Unit; use Tests\TestCase; use App\Models\User; class UserTest extends TestCase { public function test_user_can_be_created() { $user = User::create([ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => bcrypt('password'), ]); $this->assertDatabaseHas('users', [ 'email' => 'john@example.com', ]); } } ?>

Метод setUp

Метод setUp выполняется перед каждым тестом. Он используется для инициализации общих данных, создания объектов или настройки окружения.

<?php namespace Tests\Unit; use Tests\TestCase; use App\Models\Article; class ArticleTest extends TestCase { protected function setUp(): void { parent::setUp(); Article::create([ 'title' => 'Test Article', 'content' => 'Test content', 'status' => 'published', ]); } public function test_article_exists() { $article = Article::where('title', 'Test Article')->first(); $this->assertNotNull($article); } } ?>

Метод tearDown

Метод tearDown выполняется после каждого теста. Он используется для очистки данных или освобождения ресурсов.

<?php namespace Tests\Unit; use Tests\TestCase; use App\Models\User; class UserTest extends TestCase { protected function tearDown(): void { User::truncate(); parent::tearDown(); } public function test_user_count() { $count = User::count(); $this->assertEquals(0, $count); } } ?>

Трейт RefreshDatabase

Трейт RefreshDatabase автоматически обновляет базу данных перед каждым тестом, используя миграции. Это гарантирует, что каждый тест начинается с чистой базы.

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; use App\Models\Post; class PostTest extends TestCase { use RefreshDatabase; public function test_post_creation() { $post = Post::create([ 'title' => 'New Post', 'content' => 'Post content', 'user_id' => 1, ]); $this->assertDatabaseHas('posts', [ 'title' => 'New Post', ]); } } ?>

Трейт WithFaker

Трейт WithFaker предоставляет доступ к библиотеке Faker для генерации случайных данных в тестах.

<?php namespace Tests\Unit; use Tests\TestCase; use Illuminate\Foundation\Testing\WithFaker; class FactoryTest extends TestCase { use WithFaker; public function test_faker_usage() { $name = $this->faker->name(); $email = $this->faker->email(); $this->assertIsString($name); $this->assertStringContainsString('@', $email); } } ?>

Метод actingAs

Метод actingAs используется для аутентификации пользователя в тестах. Он позволяет выполнять запросы от имени конкретного пользователя.

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\User; class AuthTest extends TestCase { public function test_authenticated_user() { $user = User::create([ 'name' => 'Admin', 'email' => 'admin@example.com', 'password' => bcrypt('password'), ]); $response = $this->actingAs($user) ->get('/dashboard'); $response->assertStatus(200); } } ?>

Методы HTTP-запросов

Класс TestCase предоставляет методы для выполнения HTTP-запросов: get, post, put, patch, delete. Они позволяют тестировать маршруты и контроллеры.

<?php namespace Tests\Feature; use Tests\TestCase; class ArticleControllerTest extends TestCase { public function test_get_articles() { $response = $this->get('/api/articles'); $response->assertStatus(200); } public function test_create_article() { $data = [ 'title' => 'New Article', 'content' => 'Article content', 'status' => 'draft', ]; $response = $this->post('/api/articles', $data); $response->assertStatus(201); $this->assertDatabaseHas('articles', $data); } } ?>

Метод seed

Метод seed используется для заполнения базы данных тестовыми данными. Он может принимать имя класса сидера или вызывать все сидеры без параметров.

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; use App\Models\Category; class DatabaseTest extends TestCase { use RefreshDatabase; public function test_seeded_categories() { $this->seed('CategorySeeder'); $count = Category::count(); $this->assertGreaterThan(0, $count); } } ?>

Смотрите также

  • метод setUp,
    который выполняется перед каждым тестом
  • метод tearDown,
    который выполняется после каждого теста
  • трейт RefreshDatabase,
    который автоматически обновляет базу данных
  • метод actingAs,
    который аутентифицирует пользователя в тестах
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить