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
});