Istanbul.js adalah tool untuk melakukan cakupan tes atau test coverage.
Test coverage menggambarkan sejauh mana kode sumber dieksekusi ketika rangkaian tes dijalankan. Test coverage berfungsi untuk mengetahui bagian mana dari kode sumber yang tidak dijangkau oleh tes. nyc adalah klien CLI (Command Line Interface) untuk Istanbul.js. Pada tutorial kali ini kita akan mempelajari cara melakukan test coverage dengan menggunakan Istanbul.js atau nyc.
Buatlah sebuah folder projek dengan nama coverage dengan mengetikkan perintah berikut pada terminal.
mkdir coverage
Lalu, bukalah folder coverage dan inisialisasi projek Anda dengan perintah berikut.
cd coverage
npm init
Kemudian, lengkapi inisialisasi projek Anda seperti gambar berikut.
Selanjutnya, lakukan instalasi dependencies dengan perintah berikut.
npm install --save-dev mocha chai nyc
Lalu, buatlah file index.js di dalam folder projek Anda dengan perintah berikut.
touch index.js
Kemudian, tambahkan kode berikut.
"use strict";
exports.times = (a, b) => {
if (a >= 10) {
return (a - 9) * b;
} else {
return a * b;
}
};
exports.switch = input => {
switch (input) {
case 1:
return "one";
case 2:
return "two";
case 3:
return "three";
case 4:
return "four";
default:
return "unknown";
} // end switch
};
exports.pow = (num, pow) => num ** pow;
Berikutnya, buatlah folder test di dalam folder projek Anda dengan perintah berikut.
mkdir test
Lalu, bukalah folder test tersebut dan buatlah file sample-test.js dengan perintah berikut.
cd test
touch sample-test.js
Kemudian, tambahkan kode berikut pada file sample-test.js seperti berikut.
"use strict";
const expect = require("chai").expect;
const sample = require("../index.js");
describe("times()", function() {
it("should equal 10", function() {
expect(sample.times(2, 5)).to.equal(10);
});
});
Lalu, jalankan tes dengan mocha seperti berikut.
mocha
Perhatikan! Karena skrip times() cukup sederhana, kita bisa memperkirakan kode yang belum dites seperti berikut.
Sedangkan untuk skrip yang lebih kompleks agak sulit memperkirakan kode yang belum dites tersebut. Oleh karena itu kita bisa melakukan test coverage untuk skrip yang lebih kompleks seperti skrip berikut.
Untuk melakukan test coverage dengan Istanbul.js/nyc, bukalah file package.json dan edit bagian scripts seperti berikut.
Selanjutnya, kita bisa menjalankan test coverage dengan perintah berikut.
npm test
Atau, kita juga bisa langsung menjalankan test coverage dengan perintah berikut.
npm run coverage
Perhatikan!
Terlihat ada “Uncovered Line #s” pada tabel hasil pengujian. Jika kita jalankan run coverage, maka pengujian juga memberikan report test coverage dalam format HTML seperti berikut.
Untuk melihat report test coverage dalam format HTML tersebut, bukalah file coverage/index.html seperti berikut.
Jika kita klik link index.js pada report tersebut, maka tampil report detail per file yang dilakukan pengujian seperti berikut.
Perhatikan, terlihat report Istanbul.js berupa jumlah Statements, Branches, Functions dan Lines, di mana:
Untuk melengkapi test coverage tersebut, kita perbarui file sample-test.js dengan kode berikut.
"use strict";
const expect = require("chai").expect;
const sample = require("../index.js");
describe("Sample Test Script", function() {
describe("times()", function() {
it("should equal 10", function() {
expect(sample.times(2, 5)).to.equal(10);
});
it("should equal 6", function() {
expect(sample.times(3, 2)).to.equal(6);
});
it("should equal 25", function() {
expect(sample.times(5, 5)).to.equal(25);
});
it("should equal 5", function() {
expect(sample.times(10, 5)).to.equal(5);
});
});
describe("switch()", function() {
it('should return "one"', function() {
expect(sample.switch(1)).to.equal("one");
});
it('should return "two"', function() {
expect(sample.switch(2)).to.equal("two");
});
it('should return "three"', function() {
expect(sample.switch(3)).to.equal("three");
});
it('should return "four"', function() {
expect(sample.switch(4)).to.equal("four");
});
it('should return "unknown"', function() {
expect(sample.switch(5)).to.equal("unknown");
});
});
describe("pow()", function() {
it("should return 8", function() {
expect(sample.pow(2, 3)).to.equal(8);
});
});
});
Kemudian, kita jalankan kembali run coverage dengan perintah berikut.
npm run coverage
Hasilnya, report test coverage menjadi bertambah seperti berikut.
Sedangkan statistik test coverage sudah mencapai 100% seperti berikut.
Detail kode yang telah dites line-by-line dapat dilihat dalam report berikut.
Dengan demikian dapat disimpulkan bahwa:
Sekian tutorial test coverage kali ini dan semoga bermanfaat untuk kita semua.