Latihan 1 dari materi Testing di Laravel — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Kode awal sudah punya endpoint yang diuji, Route::post("/api/products", ...) yang memvalidasi name dan price lalu menyimpan produknya, dan class ProductTest extends TestCase dengan use RefreshDatabase; dan dua method kosong. Biarkan route, class, trait, dan nama method-nya, lalu isi:
- Di
test_can_create_product: kirim $response = $this->postJson("/api/products", ["name" => "Mouse", "price" => 150000]);, lalu $response->assertStatus(201);, lalu $this->assertDatabaseHas("products", ["name" => "Mouse"]);.
- Di
test_validation_fails_without_name: kirim request kedua $response = $this->postJson("/api/products", ["price" => 150000]);, lalu $response->assertStatus(422);.
Saat dijalankan, kedua test-nya dijalankan seperti php artisan test: request-nya sampai ke route di atas, dan RefreshDatabase mengembalikan tabelnya ke keadaan awal sebelum tiap test. Kalau keduanya lolos, output-nya:
PASS ProductTest
✓ can create product
✓ validation fails without name
Tests: 2 passed (3 assertions)
Yang dicek:
- Output-nya memuat
✓ can create product, ✓ validation fails without name, dan Tests: 2 passed.
- Ada
assertStatus(201) dan assertStatus(422).
- Ada dua request ke
/api/products (postJson("/api/products" atau post("/api/products").
- Request yang valid mengirim
"name" => "Mouse" dan "price" => 150000.
assertDatabaseHas("products", [...]) mencari Mouse.