2015-07-21 16 views
5

Sto provando a simulare i timeout della richiesta di servizio per testare il modulo requestretry del nodo, che consente di specificare una richiesta max # di tentativi di tentativi e ritardi. Per testare questo, ho bisogno di usare nock per simulare un timeout per il primo numero X di richieste, quindi rispondere correttamente alla stessa richiesta. So che esiste il metodo 'socketDelay()' per ritardare la connessione, ma come posso specificare una risposta corretta dopo quella prima risposta ritardata?Node.js Nock simula il timeout della richiesta e il successivo successo

ho questo, che simula un timeout alla prima richiesta

//delays the first request's response by 1500 
nock(urlHost) 
    .post('/' + uriPath) 
    .socketDelay(1500) 
    .reply(200, 'response body'); 

ma come posso farlo rispondere più velocemente dopo che per simulare il servizio di recupero? Sto cercando di fare qualcosa in questo modo

//delays the first two request's responses by 1500 
nock(urlHost) 
    .post('/' + requestIdentifier.ttoRoutingInfo.uriPath) 
    .socketDelay(1500) 
    .reply(200, 'response body') 
    .times(2) 
    //delays the third request by only 300 
    .then 
    .socketDelay(300) 
    .reply(200, 'response body'); 

risposta

8

Risponderò alla mia domanda da quando l'ho scoperto. Si scopre che Nock consente di mettere in coda i mock per lo stesso endpoint, anche se non è da nessuna parte nella documentazione. Questo è quello che usavo per simulare diversi tempi di ritardo nelle richieste. Notare che i diversi valori per ciascuna risposta corpo

var nockScope = nock(urlHost) 
     .post('/' + uriPath) 
     .delayConnection(400) 
     .reply(200, 'response body1') 
     .post('/' + uriPath) 
     .delayConnection(400) 
     .reply(200, 'response body2') 
     .post('/' + uriPath) 
     .delayConnection(200) 
     .reply(200, 'response body3'); 


expect(data).to.equal('response body3'); 

Dopo usando il modulo requestretry con timeout = 300, retryDelay = 500 e maxAttempts = 2, la risposta dovrebbe essere il corpo della terza richiesta in quanto i primi due time out. notare che ho usato un valore diverso per ogni corpo di risposta per garantire che stia effettivamente scadendo i primi due. È possibile verificare che le prime due richieste non siano riuscite poiché il test ha richiesto 1800 ms. 300 ms (primo timeout) + 500 ms (ritardo) + 300 ms (secondo timeout) + 500 ms (ritardo) + 200 ms (richiesta riuscita)

Problemi correlati