1分でわかるJavaScriptライブラリSinon.jsのstubの基本的な使い方

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のstubについて

Sinon.jsのstubは事前にプログラムされた動作をする機能。

例えば以下のようにstub.returns(7)と記述すればstub()を実行したときに7を返す。

const stub = require('sinon').stub();
stub.returns(7);
console.log(stub());
// => 7

callback.withArgsで引数受取時の動作を設定

const stub = require('sinon').stub();
stub.withArgs('lucky').returns(7);
console.log(stub('lucky'));
// => 7

console.log(stub('bad'));
// => undefined

returnsArgで何番目の引数を返すか設定

const stub = require('sinon').stub();

// 2番目(index:1)の引数を返す
stub.returnsArg(1);
console.log(stub('foo', 'bar'));
// => bar

callsArgWithで引数に関数を設定

const stub = require('sinon').stub();
const add = (a, b) => console.log(a + b);

// 2番目(index:1)の引数の関数に3,4の引数を渡す
stub.callsArgWith(1, 3, 4);
stub('foo', add);
// => 7

yieldsで最初に受け取った関数に引数を渡す

const stub = require('sinon').stub();
const add = (a, b) => console.log(a + b);

// 最初に受け取った関数に引数を渡す
stub.yields(2, 3);
stub(add);
// => 5

yieldToでオブジェクト関数を操作

const stub = require('sinon').stub();

stub({
  success() {
      console.log('成功');
  },
  fail() {
      console.log('失敗');
  }
});
stub.yieldTo('fail');
// => 失敗