2015-07-21 122 views
5

我試圖模擬服務請求超時來測試節點requestretry模塊,它允許您指定請求最大嘗試重試次數和重試延遲時間。爲了測試這個,我需要使用nock模擬第一個X請求的超時,然後成功響應相同的請求。我知道有'socketDelay()'方法來延遲連接,但是如何在第一次延遲響應之後指定一個成功的響應?Node.js Nock模擬請求超時和後續成功

我有這個,模擬在第一次請求

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

,但我怎麼能做出迴應之後更快地模擬服務恢復超時?我期待繼續沿着這條

//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'); 

回答

8

我會回答我的問題,因爲我想它做一些事情。原來,nock允許爲同一端點排隊模擬,儘管它不在文檔中的任何地方。這是我用來模擬請求中不同的延遲時間。注意對於每個不同的值回覆體

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

使用requestretry模塊與超時= 300,retryDelay = 500和maxAttempts = 2之後,反應應該是所述第三請求的主體,因爲前兩個超時。請注意,我爲每個響應主體使用了不同的值,以確保我實際上在前兩個中超時。您可以驗證前兩個請求失敗,因爲測試需要1800毫秒才能完成。 300ms(第一次超時)+ 500ms(延遲)+ 300ms(第二次超時)+ 500ms(延遲)+ 200ms(成功請求)