Unit test adalah sebuah proses berupa program (code test secara autonomous testing) untuk memverifikasi method/function, class, atau widget yang berada di dalam aplikasi apakah sesuai dengan persyaratan atau design yang sudah dirancang sebelumnya. Pada tahapan ini memungkinkan seorang programmer untuk memastikan kualitas aplikasi dengan membuat code testing untuk menguji dan memastikan setiap komponen — komponen terkecil dari aplikasi secara disiplin dan pada jangka waktu yang cepat.
pengertiannya sama dengan unit test akan tetapi dalam tahap ini programmer memastikan pada sejumlah class yang berkerja sama apakah memiliki behavior yang benar. Berbeda dengan unit test yang bisa dijalankan kapan saja, intergration test ini hanya bisa dijalankan pada saat codingan yang sudah di-merge dari fitur branch ke master atau bisa dijalankan pada saat rilis aplikasi. Hal ini dikarenakan untuk menjalankan satu intergration test membutuhkan waktu yang lebih lama sesuai dengan seberapa besarnya sistem aplikasi, biasanya dilakukan antara 30 menit sampai 3 jam.
End to end test adalah pengujian yang dilakukan dari ujung ke ujung yang berfokus pada hasil dari setiap interaksi pada fitur apllikasi (tamplian/output) namun dapat dilakukan dengan otomatisasi menggunakan software khusus seperti katalon studio atau silenium, dll.
Sebuah proses dalam melakukan testing
Dimulai dengan bikin testing terlebih dahulu, belom ada fiturnya, otomatis pasti fail
Bikin featurenya sampe testingnya itu sampai berhasil
Percantik codingan kalian sehingga lebih efisien dan dinamis
Jest itu merupakan Testrunner & Assertion
- Testrunner = library buat ngejalanin test
- Assertion = buat nguji result sesuai ekspetasi
Mendefine sebuah test menggunakan test/it
// 1 test = 1 unit test'
// bisa pake test / it
// 1 unit test => ada ekspetasi
// 1 ekspetasi => ada hasil(matchers)
// toBe => disebut matchers
const sum = (a, b) => {
return a + b
}
const multiply = (a, b) => {
return a * b
}
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
expect(sum(3, 4)).toBe(7);
});
it('multiplies 2 * 3 to equal 6', () => {
expect(multiply(2, 3)).toBe(6);
expect(multiply(5, 10)).toBe(50);
});
menggabukan beberapa test yg berhubungan agar lebih rapih gak berceceran
describe('test function math', () => {
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
expect(sum(3, 4)).toBe(7);
});
it('multiplies 2 * 3 to equal 6', () => {
expect(multiply(2, 3)).toBe(6);
expect(multiply(5, 10)).toBe(50);
});
})
- test/describe.skip = Untuk ngeskip suatu test/describe
- test/describe.only = Hanya jalanin test/describe ini
Dokumentasi Skip & Dokumentasi Only
Environment yang kita gunakan adalah testing, database yang kita gunakan pun juga berbeda setting config test untuk menyesuaikan database yang kita gunakan
Buat database & jalankan migrasi untuk database testing
npx sequelize db:create --env test
npx sequelize db:migrate --env test
karena kita ngetestnya sebuah aplikasi, yang dimana harus dijalanin dulu, dan juga per endpointnya tidak ngereturn sesuatu kayak contoh diatas, kita perlu bantuan suatu library yaitu supertest
Supertest adalah http assertion yang berguna untuk testing http method (seperti axios, tapi dalam dunia testing)
karena pada saat dijalankan jestnya nyangkut karena ada operasi asynchronus yg tidak di stop, maka kita harus nambahin suatu settingan Setting properti test dalam script dengan
"test" : jest --detectOpenHandles --forceExit
- --detectOpenHandles = untuk ngedetect operasi asynchronus
- --forceExit = untuk ngeforce jestnya supaya berhenti
untuk mengecheck ekspektasi dari endpoint kita, kita akan mengecheck hasil dari response. Karena sesuai dengan apps kita menghasilkan sebuah object dan juga status code, jadi akan berekspektasi seperti dibawah :
expect(response.status).toBe(201) // untuk mengecheck status codenya
expect(response.body).toBeInstanceOf(Object) // untuk mengecheck dia object atau bukan
expect(response.body).toHaveProperty('message', expect.any(String)) // untuk mengecheck isi dari objectnya memiliki property message dan isi messagenya string apapun
bisa dimanfaatkan untuk menjalankan suatu code sebelum / sesudah proses testing berjalan, ex : seeding
- afterAll
- afterEach
- beforeAll
- beforeEach
buatlah sebuah folder bin berisi file bernama www, dan diisi dengan app.listen agar setiap kita mau jalanin testing gausah di comment Dokumentasi struktur express