💻 Exemplos: Capítulo 16: Testes Automatizados com Pest PHP e Database Transactions
Especialização em Backend com PHP & Laravel • Demonstrações Práticas Compiláveis
💻 Exemplo 1 — Teste de API com Asserções JSON
<?php
// tests/Feature/ProdutoApiTest.php
use function Pest\Laravel\getJson;
it('retorna lista de produtos com sucesso', function () {
getJson('/api/v1/produtos')
->assertStatus(200)
->assertJsonStructure(['data' => [['id', 'nome', 'preco']]]);
});
💻 Exemplo 2 — Autenticação com actingAs() e Factories
<?php
use App\Models\User;
use function Pest\Laravel\actingAs;
use function Pest\Laravel\postJson;
it('impede usuario nao autenticado de criar pedido', function () {
postJson('/api/v1/pedidos', ['produto_id' => 1])
->assertStatus(401);
});
it('permite usuario autenticado criar pedido', function () {
$user = User::factory()->create();
actingAs($user, 'sanctum')
->postJson('/api/v1/pedidos', ['produto_id' => 1])
->assertStatus(201)
->assertJsonPath('produto_id', 1);
});
💻 Exemplo 3 — Isolamento com RefreshDatabase
<?php
// tests/Pest.php
uses(\Illuminate\Foundation\Testing\RefreshDatabase::class)->in('Feature');
<?php
use App\Models\Produto;
use function Pest\Laravel\postJson;
it('cria produto sem afetar outros testes', function () {
postJson('/api/v1/produtos', ['nome' => 'Teclado', 'preco' => 199.90])
->assertStatus(201);
expect(Produto::count())->toBe(1);
// ao final deste teste, a transacao e revertida -- o proximo teste comeca com 0 produtos
});