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

Метод assertJsonFragment

Метод assertJsonFragment применяется к объекту ответа, полученному в тестах после выполнения HTTP-запросов. Он проверяет, содержит ли JSON-ответ указанный фрагмент данных. Фрагмент может быть передан в виде ассоциативного массива, где ключи соответствуют полям JSON, а значения - ожидаемым данным. Метод выполняет проверку независимо от остальной структуры ответа, что делает его удобным для проверки наличия конкретных данных в больших и сложных JSON-ответах.

Синтаксис

<?php $response->assertJsonFragment($fragment); ?>

Параметр $fragment представляет собой массив с данными, которые должны присутствовать в JSON-ответе.

Пример

Давайте протестируем эндпоинт, который возвращает данные пользователя, и проверим наличие конкретного идентификатора и имени в ответе:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\User; class UserTest extends TestCase { public function test_user_response_contains_expected_fields() { $user = User::factory()->create([ 'name' => 'John Doe', 'email' => 'john@example.com', ]); $response = $this->getJson("/api/users/{$user->id}"); $response->assertJsonFragment([ 'id' => $user->id, 'name' => 'John Doe', ]); } } ?>

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

"Test passed: JSON response contains the expected fragment"

Пример

Проверим наличие нескольких полей в ответе при получении списка статей, не обращая внимание на полную структуру ответа:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Article; class ArticleTest extends TestCase { public function test_articles_list_contains_specific_data() { Article::factory()->create([ 'title' => 'Laravel Testing Guide', 'status' => 'published', 'views' => 100, ]); $response = $this->getJson('/api/articles'); $response->assertJsonFragment([ 'title' => 'Laravel Testing Guide', 'status' => 'published', ]); } } ?>

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

"Test passed: JSON response contains the article fragment"

Пример

Проверим наличие фрагмента в ответе при создании новой записи через POST-запрос:

<?php namespace Tests\Feature; use Tests\TestCase; class PostTest extends TestCase { public function test_post_creation_returns_expected_data() { $postData = [ 'title' => 'New Post Title', 'content' => 'Post content goes here', 'category' => 'tech', ]; $response = $this->postJson('/api/posts', $postData); $response->assertJsonFragment([ 'title' => 'New Post Title', 'category' => 'tech', ]); } } ?>

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

"Test passed: POST response contains the expected fragment"

Пример

Давайте проверим наличие вложенного фрагмента в JSON-ответе:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Order; use App\Models\Product; class OrderTest extends TestCase { public function test_order_response_contains_nested_data() { $order = Order::factory()->create(); $product = Product::factory()->create([ 'name' => 'Laptop', 'price' => 999, ]); $order->products()->attach($product); $response = $this->getJson("/api/orders/{$order->id}"); $response->assertJsonFragment([ 'name' => 'Laptop', 'price' => 999, ]); } } ?>

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

"Test passed: Nested JSON fragment found"

Пример

Проверим наличие фрагмента с использованием нескольких условий в одном утверждении:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Product; class ProductTest extends TestCase { public function test_product_list_contains_specific_fragments() { Product::factory()->create([ 'code' => 'PRD-001', 'name' => 'Smartphone', 'stock' => 50, 'active' => true, ]); $response = $this->getJson('/api/products'); $response->assertJsonFragment([ 'code' => 'PRD-001', 'active' => true, 'stock' => 50, ]); } } ?>

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

"Test passed: JSON contains all required fragments"

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

  • метод assertJson,
    который проверяет соответствие JSON-ответа указанным данным
  • метод assertJsonPath,
    который проверяет значение по конкретному пути в JSON
  • метод assertJsonCount,
    который проверяет количество элементов в JSON-массиве
  • метод assertJsonStructure,
    который проверяет структуру JSON-ответа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить