2014-10-18 14 views
37

Ho una funzione che sto eseguendo lo stub che viene chiamato con più argomenti. Voglio controllare lo solo il primo argomento. Il resto sono funzione di callback, quindi voglio lasciarli soli. Così, potrei avere i seguenti 2 chiamate, utilizzando ajax come esempio:Can synon stub withArgs corrisponde ad alcuni ma non a tutti gli argomenti

method.get = sinon.stub(); 
method.get(25,function(){/* success callback */},function(){/* error callback */});   
method.get(10,function(){/* success callback */},function(){/* error callback */}); 

non posso usare method.get.calls... perché allora non distingue tra il primo e il secondo get(25)get(10). Ma se io uso method.get.withArgs(25).calls... allora non corrisponde, perché withArgs() corrisponde a tutti gli argomenti, che questo non (e mai potrebbe, con i callback come quello).

Come si ottengono gli stub sinon per controllare e impostare le risposte in base al solo argesimo?

risposta

64

http://sinonjs.org/docs/#sinon-match-api

È possibile utilizzare sinon.match.any:

method.get.withArgs(25, sinon.match.any, sinon.match.any); 
+2

Grazie. Sarebbe bello se potessi fare 'method.get.withFirstArgs (25)' e quindi finchè 'arg [0]' è '25' corrisponderebbe, ma immagino che non esista. – deitch

+0

Funziona alla grande! [Ecco un link fisso] (http://sinonjs.org/releases/v3.2.1/matchers/#sinonmatchany) ai più recenti documenti 'sinon.match.any'. – WimpyProgrammer

2

Se si desidera solo per controllare il primo argomento è possibile utilizzare

method.get.withArgs(25).calledOnce 

o

method.get.calledWith(25) 
Problemi correlati