Метод assertDatabaseHas
Метод assertDatabaseHas применяется в тестах Laravel
для проверки существования записи в базе данных,
соответствующей переданным условиям. Первым параметром
передаётся имя таблицы, вторым - массив с данными
для проверки. Если запись найдена, тест считается
пройденным, иначе выбрасывается исключение.
Метод доступен в классах тестов, наследующих
TestCase.
Синтаксис
<?php
$this->assertDatabaseHas($table, $data);
?>
Пример
Давайте проверим, что в таблице 'users'
существует пользователь с email
равным 'user@example.com':
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class UserTest extends TestCase
{
public function test_user_exists()
{
$user = User::factory()->create([
'email' => 'user@example.com',
]);
$this->assertDatabaseHas('users', [
'email' => 'user@example.com',
]);
}
}
?>
Результат выполнения кода:
"Test passed: record exists in database"
Пример
Давайте проверим, что в таблице 'posts'
существует запись с 'title'
равным 'My First Post' и
'status' равным 'published':
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Post;
class PostTest extends TestCase
{
public function test_post_with_multiple_conditions_exists()
{
$post = Post::factory()->create([
'title' => 'My First Post',
'status' => 'published',
]);
$this->assertDatabaseHas('posts', [
'title' => 'My First Post',
'status' => 'published',
]);
}
}
?>
Результат выполнения кода:
"Test passed: record with multiple conditions exists"
Пример
Давайте используем assertDatabaseHas после
выполнения HTTP-запроса для проверки создания записи:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class PostControllerTest extends TestCase
{
public function test_post_can_be_created()
{
$user = User::factory()->create();
$response = $this->actingAs($user)
->post('/posts', [
'title' => 'New Post',
'content' => 'Post content',
]);
$response->assertStatus(201);
$this->assertDatabaseHas('posts', [
'title' => 'New Post',
'content' => 'Post content',
'user_id' => $user->id,
]);
}
}
?>
Результат выполнения кода:
"Test passed: post created and exists in database"
Пример
Давайте используем дополнительный параметр для проверки записи с определённым значением числового поля:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Order;
class OrderTest extends TestCase
{
public function test_order_with_specific_total_exists()
{
$order = Order::factory()->create([
'total' => 1500,
'status' => 'completed',
]);
$this->assertDatabaseHas('orders', [
'total' => 1500,
'status' => 'completed',
]);
}
}
?>
Результат выполнения кода:
"Test passed: order with specific total exists"
Смотрите также
-
метод
assertDatabaseMissing,
который проверяет отсутствие записи в таблице -
метод
assertDatabaseCount,
который проверяет количество записей в таблице -
метод
assertSoftDeleted,
который проверяет мягкое удаление записи -
метод
assertModelExists,
который проверяет существование модели в базе данных