Per un backend API, i test più utili sono i request spec: fanno una vera richiesta HTTP a un endpoint e verificano la risposta, dallo status code al corpo JSON.
RSpec.describe "Launches API", type: :request do
describe "GET /launches" do
before { create_list(:launch, 3) }
it "restituisce 200 e la lista in JSON" do
get "/launches"
expect(response).to have_http_status(:ok)
json = JSON.parse(response.body)
expect(json.size).to eq(3)
expect(json.first).to include("name", "provider")
end
end
describe "POST /launches" do
it "rifiuta dati non validi con 422" do
post "/launches", params: { launch: { name: "" } }
expect(response).to have_http_status(:unprocessable_entity)
end
end
end
Un request spec esercita l'intero stack (routing, controller, model, serializzazione) come farebbe un client reale. Verifichi lo status (:ok, :unprocessable_entity), la struttura del JSON e i casi d'errore.
Sono la rete di sicurezza ideale per un'API: se rompi un endpoint durante un refactor, il test te lo dice subito. Testi il contratto che offri al frontend, non i dettagli interni. E un contratto testato è un contratto di cui ti puoi fidare.