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:

  1. 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)

  1. Salve o arquivo como: Atividade_16_1_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_16_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_16_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_16_4_SeuNome
  2. 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);
});