Понимание Sinon.js yield(), yields() и callArg()

В чем разница между

  • 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)?

В документации нет примеров, поясняющих эти два других метода, но мне они интересны.


person TimeEmit    schedule 14.04.2013    source источник


Ответы (1)


Я считаю, что методы, изложенные в документации, следующие:

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

Основное различие между yields и callsArg можно найти в документации sinon по урожайности:

Если метод принимает более одного обратного вызова, вам нужно использовать callArg, чтобы заглушка вызывала другие обратные вызовы, кроме первого.

yields вызовет первый аргумент функции, который встретится, с любыми необязательными аргументами, которые вы ему предоставите. callsArg попытается вызвать аргумент функции по данному индексу внутри объекта arguments этого вызова и не передаст ему никаких аргументов (вы можете использовать callArgWith для такого поведения).

spy.yield очень похож на stub.yields, за исключением того, что он является частью шпионского 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();
person Travis Kaufman    schedule 15.08.2013