Test Coverage dengan Istanbul.js/nyc

Apakah fungsi dari Istanbul.js?

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.

Test Coverage Basics

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

 

text coverage with istanbul.js

 

Kemudian, lengkapi inisialisasi projek Anda seperti gambar berikut.

text coverage with istanbul.js

 

Selanjutnya, lakukan instalasi dependencies dengan perintah berikut.

npm install --save-dev mocha chai nyc

 

test coverage with istanbul.js

 

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

 

test coverage with istanbul.js

 

Perhatikan! Karena skrip times() cukup sederhana, kita bisa memperkirakan kode yang belum dites seperti berikut.

test coverage with istanbul.js

 

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.

test coverage with istanbul.js

 

Test Coverage with Istanbul.js/nyc

Untuk melakukan test coverage dengan Istanbul.js/nyc, bukalah file package.json dan edit bagian scripts seperti berikut.

test coverage with istanbul js

 

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!

test coverage with istanbul js

 

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.

test coverage with istanbul js

 

Untuk melihat report test coverage dalam format HTML tersebut, bukalah file coverage/index.html seperti berikut.

test coverage with istanbul js

 

Jika kita klik link index.js pada report tersebut, maka tampil report detail per file yang dilakukan pengujian seperti berikut.

test coverage with istanbul js

 

Perhatikan, terlihat report Istanbul.js berupa jumlah Statements, Branches, Functions dan Lines, di mana:

  • 1. Statements: unit sintaksis dari bahasa pemrograman imperatif
  • 2. Branches: instruksi yang menjalankan urutan perintah yang berbeda
  • 3. Functions: Metode atau subrutin apa pun yang berfungsi dengan baik
  • 4. Lines: seperti pernyataan, tetapi akan menghitung satu baris dengan banyak pernyataan hanya sebagai satu baris

 

Completing Test Coverage

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.

test coverage with istanbul js

 

Sedangkan statistik test coverage sudah mencapai 100% seperti berikut.

test coverage with istanbul js

 

Detail kode yang telah dites line-by-line dapat dilihat dalam report berikut.

test coverage with istanbul js

 

Dengan demikian dapat disimpulkan bahwa:

  • 1. Test coverage telah mencapai 100%
  • 2. Pengujian telah dilakukan pada semua aspek skrip
  • 3. Report detail HTML memberikan frekuensi eksekusi kode, misalnya: line 5 dieksekusi 4 kali, branch pertama dieksekusi hanya sekali dan branch yang lain 3 kali, statement switch dievaluasi 5 kali, dan seterusnya

 

Sekian tutorial test coverage kali ini dan semoga bermanfaat untuk kita semua. wink

Web developer and bad designer. Enthusiast in research and development of computer and information technology. Hard worker and militant spirituality. Care about science, technology and environment especially renewable energy.

Related Posts

0 Comments

Leave a reply