33

違いは何ですか

  • stub.yield([arg1, arg2, ...])
  • spy.yields([arg1, arg2, ...])
  • stub.callsArg(index)

Sinon.jsスタブ ライブラリに?

stub.yield()私が把握できた唯一のものです:

  stub = sinon.stub(API, 'call_remote');
  callback = sinon.spy();
  API.call_remote('help', callback);
  @stub.yield( "solution!" );
  @stub.calledOnce.should.be.true;
  @callback.calledOnce.should.be.true;
  @callback.args[0][0].should.eql( "solution!" );

should.js でテストすると、すべてのアサーションがパスします。

と の同様のテスト パターンはstub.yields()ありstub.callsArg(index)ますか?

ドキュメントには、これらの他の 2 つの方法を明確にする例はありませんが、私はそれらについて興味があります。

4

1 に答える 1

38

ドキュメントで概説されているように、方法は次のとおりだと思います。

  • spy.yield
  • stub.yields
  • stub.callsArg

との主な違いはyieldscallsArg利回りに関する sinon のドキュメントに記載されています。

メソッドが複数のコールバックを受け入れる場合、callsArg を使用して、スタブが最初のコールバック以外のコールバックを呼び出すようにする必要があります。

yieldsは、最初に遭遇した関数引数を、指定したオプションの引数とともに呼び出します。 その呼び出しのオブジェクト内の指定されたインデックスcallsArgで関数引数を呼び出そうとし、それに引数を渡しません (その動作に使用できます)。argumentscallArgWith

spy.yieldstub.yieldsSpy API の一部であり、渡されたすべてのコールバックを呼び出す点を除いて、 と非常によく似ています。

違いを示すいくつかの例を次に示します (例が少し不自然である場合はご容赦ください)。

収量:

var fn = sinon.expectation.create().withArgs(1, 2);
var stub = sinon.stub().yields(1, 2);
stub(fn);
fn.verify();

CallsArg:

var f1 = sinon.expectation.create().never();
var f2 = sinon.expectation.create().once();
var stub = sinon.stub().callsArg(1);
stub(f1, f2);
f1.verify();
f2.verify();

収率:

var f1 = sinon.expectation.create().once();
var f2 = sinon.expectation.create().once();
var stub = sinon.stub().yield();
stub(f1, f2);
f1.verify();
f2.verify();
于 2013-08-15T13:34:41.070 に答える