🧩 Exercícios: Testes Automatizados com Pest PHP
Spec Backend Com Php E Laravel • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 16.1 — Teste de API Simples com Pest e asserting Json
Contexto: Teste de API Simples com Pest e asserting Json no contexto de Testes Automatizados com Pest PHP.
Requisitos de Execução:
- Escrever caso de teste com Pest
getJson('/api/v1/produtos')->assertOk()->assertJsonCount(3).
Resultado Esperado
Teste de API executado e aprovado com Pest PHP.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_1_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes Automatizados com Pest PHP
🔑 Gabarito de Código & Solução Comentada
<?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']]]);
});
🔍 Nível 2: Prática
Problema 16.2 — Autenticação em Testes com actingAs() e Factories
Contexto: Autenticação em Testes com actingAs() e Factories no contexto de Testes Automatizados com Pest PHP.
Requisitos de Execução:
- Autenticar usuário gerado por factory com
actingAs($user, 'sanctum')e testar rota protegida.
Resultado Esperado
Acesso autenticado testado com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_2_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes Automatizados com Pest PHP
🔑 Gabarito de Código & Solução Comentada
<?php
// tests/Feature/AuthTest.php
use App\Models\User;
use function Pest\Laravel\actingAs;
it('permite acesso a rota protegida para usuario autenticado', function () {
$user = User::factory()->create();
actingAs($user, 'sanctum')
->getJson('/api/v1/user')
->assertOk();
});
⚡ Nível 3: Integração
Problema 16.3 — Isolamento de Banco com use DatabaseTransactions
Contexto: Isolamento de Banco com use DatabaseTransactions no contexto de Testes Automatizados com Pest PHP.
Requisitos de Execução:
- Habilitar trait de transações para rollback automático após cada teste unitário.
Resultado Esperado
Banco de dados resetado automaticamente via rollback no teardown do teste.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_3_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes Automatizados com Pest PHP
🔑 Gabarito de Código & Solução Comentada
<?php
// tests/Pest.php
uses(
Tests\TestCase::class,
Illuminate\Foundation\Testing\DatabaseTransactions::class,
)->in('Feature');
🏆 Nível 4: Desafio Corporativo
Problema 16.4 — Mocking de Filas e Eventos com Queue::fake() e Event::fake()
Contexto: Mocking de Filas e Eventos com Queue::fake() e Event::fake() no contexto de Testes Automatizados com Pest PHP.
Requisitos de Execução:
- Validar que um job foi enfileirado sem executá-lo fisicamente usando
Queue::assertPushed().
Resultado Esperado
Enfileiramento de job validado com mock sem dependência externa.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_4_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes Automatizados com Pest PHP
🔑 Gabarito de Código & Solução Comentada
<?php
// tests/Feature/CheckoutTest.php
use Illuminate\Support\Facades\Queue;
use App\Jobs\ProcessarFaturaJob;
use function Pest\Laravel\postJson;
it('enfileira job de fatura ao criar pedido', function () {
Queue::fake();
postJson('/api/v1/pedidos', ['total' => 100.0])->assertCreated();
Queue::assertPushed(ProcessarFaturaJob::class);
});