LoginSignup
3
2

More than 5 years have passed since last update.

Sinon.JSチートシート、を目指したメモ

Posted at

概要

Sinon.JSのAPIで、私がよく使うものをメモ。
合わせて、検証時のChaiとの組み合わせ例も記載。

スタブ関数の動作を設定するAPI

n 回目の呼び出し時に、値Zを返却する。

stubA.onCall(0).returns("hoge"); // 初回(=0 回目)の呼び出しで "hoge" を返す。
stubA.onCall(n).returns(
  Promise.resolve({"result" : "OK"})
); // n 回目の呼び出しで {"result" : "OK"} を引数としたPromise.resolve()インスタンスを返す。

引数A で呼び出されたら、値Zを返却する。

stubA.withArgs( "hoge" ).returns( 
  { "message" : "OK" }
); // 引数 "hoge" で呼び出されたら、{ "message" : "OK" }を戻り値として返却する。

呼び出されたら、即座にcallbackA関数を引数Bを用いて実行する。

stubA.callsArgWith( 0, "hoge" ); // stubA( function(param1){ /* ぴよぴよ */ } )の呼び出しに対して、stubAの1番目の引数をcallback関数とみなして、引数param1に"hoge"を指定した上で即座に callback関数を実行する。

stubA.callsArgWith( 2, null, {"value" : "OK"} ); // stubA()の2番目(0オリジン)の引数をcallback関数と見なして実行する。詳細は以下のコメント内を参照。
/*
  stubA( param0, param1, function(err, result){
    // 何らかのコールバック処理。
  });
  // 上記↑のようにスタブ関数stubA()を呼び出した際に、
  // その2番目の引数(0オリジン)をcallback関数と扱って、
  // function( err=null, result={"value" : "OK"} );
  // として即座に実行する。
*/ 

呼び出された時の動作を、任意に設定する。

stubA.callsFake( function(str){ return str; } ); // スタブ作成の観点では stubA = sinon.spy( function(str){ return str; } ); と同等の動作。

// 本来は、オブジェクト内の既存メソッドを、任意の関数で動作を置き換えたうえでスタブ化するのが目的のAPI。

実行後のスタブ関数の呼び出し状況を取得するAPI

1回でだけ呼び出されたか?を true / false で取得する。

stubA.calledOnce;

assert( stubA.calledOnce, "stubA()を1回だけ呼び出すこと" );

1回目の呼び出しの引数を取得する。


stubA.getCall(0).args; // ⇒ [ args0, args1,,, ] 引数の配列が返る。

expect( stubA.getCall(0).args[0] ).to.equal( "hoge", "1回目の呼び出しの引数の1つ目が「"hoge"」であること" );
expect( stubA.getCall(1).args[1] ).to.be.null; // 2回目の呼び出しの引数の2つ目が null であること。
expect( stubA.getCall(1).args[0] ).to.have.property("status").to.equal(200); // 2回目の呼び出しの引数の1つ目がプロパティ"status"を持ち、且つその値が「200」であること。

特定の引数で1回だけ呼び出されたか?を true / false で取得する.

stubA.withArgs( "hoge" ).calledOnce;

assert( stubA.withArgs( "hoge" ).calledOnce, "stubA()を引数「hoge」で1度だけ呼び出すこと" );

呼び出された回数を取得する。

stubA.callCount;

expect( stubA.callCount ).to.equal( 3, "stubA()が3回呼び出されること" );

1度も呼び出されなかったか?を true / false で取得する.

stubA.notCalled;

assert( stubA.notCalled, "stubA()が1度も呼ばれないこと" );

参考リンクなど

Sinon.JSの公式トップページ
https://sinonjs.org/

Sinon.JSのスタブ関数の動作設定用APIの仕様
https://sinonjs.org/releases/v1.17.7/stubs/

Sinon.JSのスタブ/スパイ関数の動作検証用APIの仕様
https://sinonjs.org/releases/v1.17.7/spies/

Chaiの公式トップページ
http://www.chaijs.com/

Chaiのexpect()のLanguage Chains(to.equal()とか)の仕様
http://www.chaijs.com/api/bdd/

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2