2016-06-21 18 views
5

Wiem, jak użyć kodu pośredniczącego do zastąpienia jednej funkcji.Jak mogę zablokować łańcuch metod w Sinon?

sandbox.stub(Cars, "findOne", 
      () => {return car1 }); 

Ale teraz mam linię w mojej funkcji chcę przetestować, że muszę skrótową, że wygląda to

Cars.find().fetch() 

Więc istnieje łańcuch funkcji tutaj i jestem pewien, co Muszę zrobić. W jaki sposób mogę "" znaleźć ", aby zwrócić coś, co mogę wykorzystać do" pobrania "kodu pośredniczącego?

Odpowiedz

4

Spróbuj tego:

sandbox.stub(Cars, "find",() => { 
    return { 
     fetch: sinon.stub().returns(anything); 
    }; 
}); 
+0

dzięki że pracował idealnie! – Diskdrive

+1

Usunięto 'stub (obj, 'meth', fn), patrz dokumentacja' –

+0

warto dodać, że Sinon sugeruje: Użyj sandbox.stub (obj, 'meth'). CallsFake (fn) zamiast tego kolejność funkcji. Zamiast tego użyj piaskownicy.stub (obj, 'meth') .wartość (fn), aby uzyskać wartość niefunkcjonalną. – keligijus

0

To kolejne podejście, które pozwala również szpiegostwo na łańcuchach metod jQuery - które zajęło mi dużo czasu, aby dowiedzieć się.

Na przykład próbuję przetestować że pole email jest wyczyszczone

//set up stub and spy 
    const valSpy = sandbox.spy(); 
    const jQueryStub = sandbox 
     .stub($.prototype, "find")  // this prototype is important 
     .withArgs("input[name=email]") 
     .returns({ val: valSpy }); 

    // call function under test 
    learnerAlreadyAccepted(inviteDoc); 

    // check expectations 
    expect(jQueryStub).to.have.been.called;  // not really necessary 
    expect(valSpy).to.have.been.calledWith(""); 

i funkcja mocy testu jest (w przybliżeniu):

learnerAlreadyAccepted = function(doc) { 
    $("form").find("input[name=email]").val(""); 
    } 
Powiązane problemy