Метод assertCreated
Метод assertCreated применяется к объекту ответа в тестах Laravel
и проверяет, что HTTP-статус ответа равен 201.
Статус 201 означает, что запрос был успешно обработан,
и в результате был создан новый ресурс.
Метод не принимает никаких параметров и используется
для проверки успешного создания сущности через API.
Синтаксис
<?php
$this->post($uri, $data)->assertCreated();
?>
Пример
Давайте протестируем создание новой статьи через API:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Article;
class ArticleTest extends TestCase
{
public function test_store_returns_created_status()
{
$data = [
'title' => 'Test Article',
'content' => 'Test Content',
'status' => 'published',
];
$response = $this->postJson('/api/articles', $data);
$response->assertCreated();
}
}
?>
Результат выполнения кода:
"Test passed: Response status is 201"
Пример
Давайте проверим создание пользователя с проверкой данных в базе данных:
<?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_registration_returns_201()
{
$data = [
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => 'password123',
];
$response = $this->postJson('/api/users', $data);
$response->assertCreated();
$this->assertDatabaseHas('users', [
'email' => 'john@example.com',
]);
}
}
?>
Результат выполнения кода:
"Test passed: Response status is 201 and user exists in database"
Пример
Давайте сравним поведение метода при успешном и неудачном создании ресурса:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Product;
class ProductTest extends TestCase
{
public function test_product_creation_success()
{
$data = [
'name' => 'Test Product',
'price' => 99.99,
'stock' => 10,
];
$response = $this->postJson('/api/products', $data);
$response->assertCreated();
}
public function test_product_creation_fails_with_invalid_data()
{
$data = [
'name' => '',
'price' => -5,
];
$response = $this->postJson('/api/products', $data);
try {
$response->assertCreated();
} catch (\Exception $e) {
echo $e->getMessage();
}
}
}
?>
Результат выполнения кода:
"Test passed: Response status is 201"
"Expected response status code [201] but received 422"
Смотрите также
-
метод
assertStatus,
который проверяет произвольный HTTP-статус -
метод
assertOk,
который проверяет статус 200 -
метод
assertNoContent,
который проверяет статус 204 -
метод
postJson,
который отправляет JSON-запрос и возвращает объект ответа