目次
Sinon.jsとは
Sinon.jsとはJavaScriptでテストダブル(テストの代役)を実現するライブラリ。使用するにはnode.jsとSinon.jsが必要。
まずSinon.jsを下記のコマンドでインストールする。
$ npm i sinon
インストールが完了したらs.jsのような適当なJavaScriptを作成してrequire記述してで読み込む。
const sinon = require('sinon');
実行は $ node s.js
Sinon.jsのspyについて
Sinon.jsのspyは以下のように作成する。指定された引数だけobj.numを増やすサンプルのオブジェクトも追加した。サンプルではinc()を見るようにした。
const obj = { num: 0, inc(n = 1) { this.num += n; return this.num; } }; const sinon = require('sinon'); const spy = sinon.spy(obj, 'inc');
spy.calledで呼び出しの真偽を取得
const obj = { num: 0, inc(n = 1) { this.num += n; return this.num; } }; const sinon = require('sinon'); const spy = sinon.spy(obj, 'inc'); obj.inc(); console.log(spy.called); // => true
一度も呼び出されなければfalseになる。
const obj = { num: 0, inc(n = 1) { this.num += n; return this.num; } }; const sinon = require('sinon'); const spy = sinon.spy(obj, 'inc'); console.log(spy.called); // => false
spy.calledで呼び出し回数を取得
const obj = { num: 0, inc(n = 1) { this.num += n; return this.num; } }; const sinon = require('sinon'); const spy = sinon.spy(obj, 'inc'); obj.inc(); obj.inc(); console.log(spy.callCount); // => 2
spy.argsで引数を取得
const obj = { num: 0, inc(n = 1) { this.num += n; return this.num; } }; const sinon = require('sinon'); const spy = sinon.spy(obj, 'inc'); obj.inc(); obj.inc(3); console.log(JSON.stringify(spy.args)); // => [[],[3]]
spy.returnValuesで戻り値を取得
const obj = { num: 0, inc(n = 1) { this.num += n; return this.num; } }; const sinon = require('sinon'); const spy = sinon.spy(obj, 'inc'); obj.inc(); obj.inc(3); console.log(JSON.stringify(spy.returnValues)); // => [1,4]
spy.thisValues[0]でオブジェクトの値を取得
const obj = { num: 0, inc(n = 1) { this.num += n; return this.num; } }; const sinon = require('sinon'); const spy = sinon.spy(obj, 'inc'); obj.inc(); obj.inc(3); console.log(spy.thisValues[0]); // => { num: 4, inc: {略} }