2015-06-08 7 views
5

Vorrei testare la mia applicazione angolare con Jasmine. Così ho creato alcuni test, molti di questi funzionano bene. Ma una delle mie funzioni richiede all'utente di compilare un prompt. I test non possono riempire questo messaggio, quindi li ho derisi con spyOn(window,'prompt').and.returnValue('test'). Funziona, ma solo una volta.Jasmine spyOn con più resi

Quando aggiungo due dei miei componenti (la funzione in cui si trova il prompt), voglio spyOn il primo prompt con risultato 'test' e il secondo prompt con 'test2'. Ho provato a fare questo nel modo seguente:

it 'should place the component as last object in the form', -> 

     spyOn(window, 'prompt').and.returnValue('test') 
     builder.addFormObject 'default', {component: 'test'} 

     spyOn(window, 'prompt').and.returnValue('test2') 
     builder.addFormObject 'default', {component: 'test2'} 

     expect(builder.forms['default'][0].name).toEqual('test') 

Ma questo dà il seguente errore: Error: prompt has already been spied upon Questo è abbastanza logico, ma non so altro modo di tornare con uno spyOn.

Quindi, quello che voglio è questo: Prima del primo addFormObject voglio spiare il prompt che restituisce 'test'. E la seconda addFormObject voglio spiare con ritorno 'test2'

risposta

1

Con spyOn è possibile restituire il valore schernito e impostarlo in modo dinamico, come nel codice seguente

it 'should place the component as last object in the form', -> 
    mockedValue = null 

     spyOn(window, 'prompt').and.returnValue(mockedValue) 
     mockedValue = 'test' 
     builder.addFormObject 'default', {component: 'test'} 

     mockedValue = 'test2' 
     builder.addFormObject 'default', {component: 'test2'} 

     expect(builder.forms['default'][0].name).toEqual('test') 
2

But this gives the following error: Error: prompt has already been spied upon

Il modo corretto per farlo è come che:

var spy = spyOn(window, 'prompt'); 

... 
spy.and.returnValue('test') 

... 
spy.and.returnValue('test2') 
1

Dal gelsomino v2.5, utilizzare l'impostazione globale allowRespy().

jasmine.getEnv().allowRespy(true);

Sarete in grado di chiamare spyOn() più volte, quando non si vuole e/o avere accesso alla prima spia. Attenzione, restituirà la spia precedente, se presente è già attiva.

spyOn(window, 'prompt').and.returnValue('test') 
 
... 
 
spyOn(window, 'prompt').and.returnValue('test')