Laravel:Apa Saja Yang Perlu ditest - Part 1
Dalam mengembangkan aplikasi dengan pendekatan Test-Driven Development (TDD), ada berbagai aspek yang perlu diuji untuk memastikan aplikasi berfungsi dengan baik dan memenuhi persyaratan yang telah ditentukan. Berikut adalah beberapa hal penting yang perlu diuji dalam konteks pengembangan aplikasi Laravel:
1. Pengujian Unit (Unit Testing)
Pengujian unit berfokus pada pengujian bagian terkecil dari aplikasi, biasanya fungsi atau metode individu. Dalam Laravel, pengujian unit dapat dilakukan dengan PHPUnit atau Pest.
- Model: Uji metode dalam model, seperti accessor, mutator, dan scope.
- Helper Functions: Uji fungsi bantu yang Anda buat untuk digunakan di seluruh aplikasi.
- Services: Uji layanan khusus yang mengandung logika bisnis.
Contoh:
// tests/Unit/ExampleTest.php
it('adds two numbers correctly', function () {
expect(1 + 1)->toBe(2);
});
2. Pengujian Fitur (Feature Testing)
Pengujian fitur berfokus pada pengujian skenario pengguna yang lebih besar dan lebih kompleks, seperti interaksi antara beberapa komponen.
- Routing: Pastikan rute-rute aplikasi berfungsi dengan benar dan mengembalikan respons yang diharapkan.
- Controllers: Uji logika dalam controller untuk memastikan bahwa tindakan yang diharapkan terjadi ketika rute diakses.
- Forms: Uji validasi form dan pengiriman data untuk memastikan input yang valid diterima dan input yang tidak valid ditolak.
Contoh:
// tests/Feature/ArticleTest.php
it('allows a user to create an article', function () {
$response = $this->post('/articles', [
'title' => 'Test Article',
'content' => 'Test Content'
]);
$response->assertStatus(201);
$this->assertDatabaseHas('articles', [
'title' => 'Test Article',
'content' => 'Test Content'
]);
});
3. Pengujian Database
Pengujian ini memastikan bahwa interaksi dengan database berfungsi dengan benar.
- Migrations: Uji apakah migrasi berjalan dengan benar dan membuat skema database yang diharapkan.
- Models: Uji hubungan antara model (one-to-one, one-to-many, many-to-many).
- Factories: Uji apakah factory membuat data dummy dengan benar.
Contoh:
// tests/Feature/DatabaseTest.php
it('has articles table', function () {
$this->assertTrue(
Schema::hasTable('articles')
);
});
4. Pengujian API
Pengujian ini memastikan bahwa API berfungsi dengan benar dan mengembalikan respons yang diharapkan.
- Endpoints: Uji endpoint API untuk memastikan bahwa mereka mengembalikan data yang benar.
- Authorization: Uji bahwa endpoint API dilindungi dengan benar dan hanya dapat diakses oleh pengguna yang memiliki izin.
- Data Format: Uji bahwa data yang dikembalikan API memiliki format yang benar.
Contoh:
// tests/Feature/ApiTest.php
it('retrieves articles as JSON', function () {
$response = $this->getJson('/api/articles');
$response->assertStatus(200)
->assertJsonStructure([
'*' => ['id', 'title', 'content', 'created_at', 'updated_at']
]);
});
5. Pengujian Middleware
Pengujian ini memastikan bahwa middleware berfungsi dengan benar dan mengelola request/response sesuai dengan yang diharapkan.
- Authentication: Uji bahwa rute yang dilindungi tidak dapat diakses tanpa autentikasi.
- Logging: Uji bahwa request tertentu dicatat dengan benar.
Contoh:
// tests/Feature/MiddlewareTest.php
it('denies access to unauthenticated users', function () {
$response = $this->get('/protected-route');
$response->assertRedirect('/login');
});
6. Pengujian Validasi
Pengujian ini memastikan bahwa validasi input bekerja dengan benar, baik untuk input yang valid maupun yang tidak valid.
- Request Validation: Uji bahwa request dengan input valid diterima dan input tidak valid ditolak.
- Custom Validation Rules: Uji aturan validasi kustom yang Anda buat.
Contoh:
// tests/Feature/ValidationTest.php
it('validates article input', function () {
$response = $this->post('/articles', [
'title' => '',
'content' => 'Test Content'
]);
$response->assertSessionHasErrors(['title']);
});
Kesimpulan
Dengan melakukan berbagai jenis pengujian ini, Anda dapat memastikan bahwa aplikasi Laravel Anda berfungsi dengan benar dan memenuhi persyaratan yang diharapkan. TDD membantu memandu proses pengembangan dan memastikan bahwa setiap bagian dari aplikasi diuji dengan baik sebelum diintegrasikan ke dalam kode produksi.