Testing Node.js dengan Sinon.js

Apakah fungsi dari Sinon.js?

Sinon.js berfungsi sebagai tools untuk melakukan unit test pada JavaScript.

Untuk menginstal Sinon.js, ketikkan perintah berikut.

npm i --save-dev sinon

 

Proses instalasi Sinon.js dapat dilihat pada gambar berikut.

sinonjs-instal

 

Sinon.js menyediakan fitur Spies, Stubs dan Mock di mana:

  • - Spies: melakukan verifikasi terhadap suatu pemanggilan fungsi
  • - Stubs: memungkinkan untuk mengubah behaviour dari fungsi
  • - Mocks: dapat melakukan fungsi spies dan stubs

 

Spies biasanya digunakan untuk:

  • - Mengetahui berapa banyak sebuah fungsi dipanggil
  • - Mengetahui argumen apa saja yang dipanggil bersamaan dengan fungsi

 

Beberapa fungsi yang digunakan untuk mengecek berapa kali suatu fungsi dipanggil yaitu:

  • - sinon.assert.callCount akan menghitung berapa kali fungsi dipanggil
  • - sinon.assert.calledOnce akan memastikan fungsi dipanggil tepat satu kali
  • - sinon.assert.notCalled akan memastikan fungsi tidak dipanggil

 

Langkah-langkah Pengujian dengan Spies

Buatlah sebuah fungsi di dalam folder controllers seperti berikut dan simpan dengan nama app.controller.js.

module.exports = {

    getIndexPage: (req, res) => {

        res.send("Hey");

    }

};

 

app-controller-js

 

Kemudian buatlah sebuah fungsi untuk pengujian di mana fungsi tersebut mengambil dua parameter. Lalu simpan file tersebut di dalam folder tests dengan nama app.controller.test.js. Instansiasi req dan res ke objek kosong dan gunakan instansiasi req dan res tersebut seperti berikut.

const chai = require("chai");

const expect = chai.expect;

const indexPage = require("../../controllers/app.controller.js");

 

describe("getIndexPage", function () {

    it('should return index page', function () {

       let req = {}

       let res = {

           send: function() {}

       }

       indexPage.getIndexPage(req, res);

    });

});

 

app-controller-test-js

 

Perhatikan!

  • - Fungsi tersebut belum bisa untuk melakukan tes
  • - Gunakan spies dan buat assertion pada spies tersebut
  • - Spies memberi fungsi dummy untuk melacak eksekusi fungsi
  • - Gantikan fungsi kosong dengan spies

 

const chai = require("chai");

const expect = chai.expect;

const sinon = require("sinon");

const indexPage = require("../../controllers/app.controller.js");

 

describe("getIndexPage", function () {

    it('should return index page', function () {

       let req = {}

       let res = {

           send: sinon.spy()

       }

       indexPage.getIndexPage(req, res);

       console.log(res.send);

    });

});

 

app-controller-test-js-2

 

Untuk menjalankan pengujian, ketikkan perintah berikut.

mocha tests/**/*.*

 

Proses pengujian menghasilkan daftar semua metode yang bisa dipanggil untuk membuat assertion untuk tes seperti berikut.

testing-process

 

Selanjutnya, kita bisa membuat beberapa assertion, misalnya:

  • Fungsi res.send akan dipanggil sekali
  • Menghasilkan argumen Hey

 

const chai = require("chai");

const expect = chai.expect;

const sinon = require("sinon");

const indexPage = require("../../controllers/app.controller.js");

 

describe("getIndexPage", function () {

    it('should return index page', function () {

       let req = {}

       let res = {

           send: sinon.spy()

       }

       indexPage.getIndexPage(req, res);

       console.log(res.send);

       expect(res.send.calledOnce).to.be.true;

       expect(res.send.firstCall.args[0]).to.equal("bla");

    });

});

 

app-controller-test-js-3

 

Lalu, lakukan pengujian kembali dengan perintah berikut.

mocha tests/**/*.* 

 

Proses pengujian menghasilkan notifikasi satu tes gagal seperti gambar berikut.

testing-process-2

 

Hal ini disebabkan karena ekspektasi untuk mendapatkan argumen "bla" dan bukan "Hey". Oleh karena itu, kita ganti "bla" dengan "Hey" seperti berikut.

const chai = require("chai");

const expect = chai.expect;

const sinon = require("sinon");

const indexPage = require("../../controllers/app.controller.js");

 

describe("getIndexPage", function () {

    it('should return index page', function () {

       let req = {}

       let res = {

           send: sinon.spy()

       }

       indexPage.getIndexPage(req, res);

       console.log(res.send);

       expect(res.send.calledOnce).to.be.true;

       expect(res.send.firstCall.args[0]).to.equal("Hey");

    });

});

 

app-controller-test-js-4

 

Kemudian, kita lakukan pengujian kembali dengan perintah berikut.

mocha tests/**/*.* 

 

Hasilnya, proses pengujian menghasilkan notifikasi tes berhasil seperti gambar berikut.

testing-process-3

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.

0 Comments

Leave a reply