Метод postJson
Метод postJson применяется в тестовых классах Laravel
для имитации POST-запроса с JSON-данными на указанный маршрут.
Первым параметром передаётся URL, вторым - массив данных,
которые будут преобразованы в JSON. Третьим параметром
можно передать дополнительные заголовки. Метод возвращает
экземпляр класса TestResponse, позволяющий выполнять
различные проверки ответа.
Синтаксис
<?php
$this->postJson($uri, $data, $headers);
?>
Пример
Давайте отправим POST-запрос с JSON-данными для создания новой статьи:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ArticleTest extends TestCase
{
public function test_create_article()
{
$data = [
'title' => 'article',
'content' => 'text',
'status' => 'published'
];
$res = $this->postJson('/api/articles', $data);
$res->assertStatus(201);
}
}
?>
Пример
Отправим запрос с дополнительными заголовками для авторизации:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ArticleTest extends TestCase
{
public function test_create_article_with_auth()
{
$data = [
'title' => 'article',
'content' => 'text',
'status' => 'published'
];
$headers = [
'Authorization' => 'Bearer token_123'
];
$res = $this->postJson('/api/articles', $data, $headers);
$res->assertStatus(201);
}
}
?>
Результат выполнения кода:
"Status: 201 Created"
Пример
Проверим, что сервер возвращает корректный JSON-ответ после создания:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ArticleTest extends TestCase
{
public function test_article_creation_response()
{
$data = [
'title' => 'article',
'content' => 'text',
'status' => 'published'
];
$res = $this->postJson('/api/articles', $data);
$res->assertStatus(201)
->assertJson([
'success' => true,
'message' => 'article created'
]);
}
}
?>
Результат выполнения кода:
"JSON response matches expected structure"
Смотрите также
-
метод
getJson,
который отправляет GET-запрос с JSON-ожиданием -
метод
post,
который отправляет обычный POST-запрос -
метод
json,
который отправляет запрос с JSON-телом -
метод
assertStatus,
который проверяет код ответа HTTP