2013-04-14 17 views
19

co jest różnicą międzyZrozumienie wydajność Sinon.js w(), wydajność()() i callsArg

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

w bibliotece Sinon.js szczątkowego ?

stub.yield() jest jedynym, który udało mi się uchwycić:

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!"); 

testowane z should.js, musiałby przejść wszystkie twierdzenia.

Czy są podobne wzorce testowe dla stub.yields() i stub.callsArg(index)?

W dokumentacji nie podano przykładów wyjaśniających te dwie pozostałe metody, ale jestem ciekawy.

Odpowiedz

22

wierzę metody, jak przedstawiono w dokumentacji, są następujące:

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

Główną różnicą pomiędzy yields i callsArg można znaleźć w dokumentacji Sinona dla plonów:

Jeśli metoda akceptuje więcej niż jedno wywołanie zwrotne, należy użyć funkcji callArg, aby kod pośredniczący wywoływał inne wywołania zwrotne niż pierwsza.

yields wywoła funkcję argumentu pierwszy napotka wszelkich argumentów opcjonalnych Państwo dostarczają do niego. callsArg podejmie próbę wywołania argumentu funkcji pod numerem o danym indeksie w obiekcie arguments tego wywołania i nie przekazuje do niego żadnych argumentów (można użyć do tego zachowania wartości callArgWith).

spy.yield jest bardzo podobny do stub.yields, z tym że jest częścią interfejsu API szpiegującego i wywołuje wszystkie wywołania zwrotne przekazane do niego.

Oto niektóre przykłady pokazujące różnice (wybacz mi, jeśli przykłady są nieco wymyślony):

Wynik:

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(); 

Wydajność:

var f1 = sinon.expectation.create().once(); 
var f2 = sinon.expectation.create().once(); 
var stub = sinon.stub().yield(); 
stub(f1, f2); 
f1.verify(); 
f2.verify(); 
+0

Zobacz także: http: // blo g.inadram.com/sinon-stub-by-example/ – hellboy