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.
Sinon.js menyediakan fitur Spies, Stubs dan Mock di mana:
Spies biasanya digunakan untuk:
Beberapa fungsi yang digunakan untuk mengecek berapa kali suatu fungsi dipanggil yaitu:
Buatlah sebuah fungsi di dalam folder controllers seperti berikut dan simpan dengan nama app.controller.js.
module.exports = {
getIndexPage: (req, res) => {
res.send("Hey");
}
};
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);
});
});
Perhatikan!
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);
});
});
Untuk menjalankan pengujian, ketikkan perintah berikut.
mocha tests/**/*.*
Proses pengujian menghasilkan daftar semua metode yang bisa dipanggil untuk membuat assertion untuk tes seperti berikut.
Selanjutnya, kita bisa membuat beberapa assertion, misalnya:
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");
});
});
Lalu, lakukan pengujian kembali dengan perintah berikut.
mocha tests/**/*.*
Proses pengujian menghasilkan notifikasi satu tes gagal seperti gambar berikut.
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");
});
});
Kemudian, kita lakukan pengujian kembali dengan perintah berikut.
mocha tests/**/*.*
Hasilnya, proses pengujian menghasilkan notifikasi tes berhasil seperti gambar berikut.