Метод assertDatabaseMissing
Метод assertDatabaseMissing используется в тестах Laravel для проверки того, что в таблице базы данных отсутствуют записи, соответствующие указанным условиям. Первым параметром передаётся имя таблицы, вторым - массив данных для поиска, третьим (необязательным) - соединение с базой данных. Метод проверяет, что в таблице нет ни одной записи, удовлетворяющей всем переданным критериям.
Синтаксис
<?php
$this->assertDatabaseMissing($table, $data, $connection);
?>
Пример
Давайте проверим, что после удаления пользователя его запись отсутствует в таблице:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class UserTest extends TestCase
{
public function test_user_is_deleted()
{
$user = User::create([
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => bcrypt('password')
]);
$user->delete();
$this->assertDatabaseMissing('users', [
'email' => 'john@example.com'
]);
}
}
?>
Пример
Давайте проверим, что после обновления записи старые данные отсутствуют в базе:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Post;
class PostTest extends TestCase
{
public function test_post_updated_successfully()
{
$post = Post::create([
'title' => 'Old Title',
'content' => 'Old content text',
'is_published' => false
]);
$post->update([
'title' => 'New Title',
'content' => 'New content text',
'is_published' => true
]);
$this->assertDatabaseMissing('posts', [
'title' => 'Old Title',
'content' => 'Old content text'
]);
$this->assertDatabaseHas('posts', [
'title' => 'New Title'
]);
}
}
?>
Пример
Давайте проверим, что при неудачной валидации данные не сохраняются в базу:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Article;
class ArticleControllerTest extends TestCase
{
public function test_article_not_created_with_invalid_data()
{
$response = $this->postJson('/api/articles', [
'title' => '',
'content' => 'Some content'
]);
$response->assertStatus(422);
$this->assertDatabaseMissing('articles', [
'content' => 'Some content'
]);
}
}
?>
Пример
Давайте проверим, что после массового удаления все указанные записи отсутствуют:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class UserTest extends TestCase
{
public function test_multiple_users_deleted()
{
User::factory()->count(3)->create([
'status' => 'inactive'
]);
User::where('status', 'inactive')->delete();
$this->assertDatabaseMissing('users', [
'status' => 'inactive'
]);
}
}
?>
Смотрите также
-
метод
assertDatabaseHas,
который проверяет наличие записей в таблице -
метод
assertDatabaseCount,
который проверяет количество записей в таблице -
метод
assertModelMissing,
который проверяет отсутствие модели в базе -
метод
assertSoftDeleted,
который проверяет, что модель помечена как мягко удалённая