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

Метод assertModelMissing

Метод assertModelMissing применяется в тестах Laravel для проверки того, что указанная модель не существует в базе данных. Он принимает экземпляр модели Eloquent и проверяет, что запись с таким первичным ключом отсутствует в таблице. Если модель присутствует в базе, тест завершится с ошибкой. Данный метод полезен при проверке операций удаления, а также для подтверждения того, что определённые данные не были созданы или сохранены.

Синтаксис

<?php $this->assertModelMissing($model); ?>

Метод принимает один обязательный параметр - экземпляр модели Eloquent, которую необходимо проверить на отсутствие в базе данных. Если модель найдена по её первичному ключу, тест будет провален.

Пример

Давайте проверим, что статья была успешно удалена из базы данных:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Article; use Illuminate\Foundation\Testing\RefreshDatabase; class ArticleTest extends TestCase { use RefreshDatabase; public function test_article_can_be_deleted() { $article = Article::factory()->create([ 'title' => 'article', 'content' => 'text' ]); $article->delete(); $this->assertModelMissing($article); } } ?>

Результат выполнения кода:

"Test passed: model is missing"

Если бы модель всё ещё существовала в базе, тест выдал бы ошибку с сообщением о том, что запись найдена.

Пример

Рассмотрим проверку отсутствия модели после каскадного удаления через внешний ключ:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Category; use App\Models\Article; use Illuminate\Foundation\Testing\RefreshDatabase; class CategoryTest extends TestCase { use RefreshDatabase; public function test_articles_deleted_with_category() { $category = Category::factory()->create([ 'name' => 'category' ]); $article = Article::factory()->create([ 'category_id' => $category->id, 'title' => 'article' ]); $category->delete(); $this->assertModelMissing($article); } } ?>

Результат выполнения кода:

"Test passed: article model is missing"

Пример

Проверим, что модель не была создана при неудачной валидации:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; class UserTest extends TestCase { use RefreshDatabase; public function test_user_not_created_with_invalid_data() { $user = new User([ 'name' => '', 'email' => 'invalid-email' ]); $saved = $user->save(); $this->assertFalse($saved); $this->assertModelMissing($user); } } ?>

Результат выполнения кода:

"Test passed: user model is missing"

Пример

Использование метода при проверке ответа API на удаление ресурса:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Article; use Illuminate\Foundation\Testing\RefreshDatabase; class ApiArticleTest extends TestCase { use RefreshDatabase; public function test_api_deletes_article() { $article = Article::factory()->create([ 'title' => 'article', 'content' => 'text' ]); $response = $this->deleteJson('/api/articles/' . $article->id); $response->assertStatus(200); $this->assertModelMissing($article); } } ?>

Результат выполнения кода:

"Test passed: article is missing after API deletion"

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

  • метод assertModelExists,
    который проверяет существование модели в базе данных
  • метод assertDatabaseMissing,
    который проверяет отсутствие записей в таблице по условию
  • метод assertSoftDeleted,
    который проверяет мягкое удаление модели
  • класс RefreshDatabase,
    который используется для сброса базы данных между тестами
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить