2015-07-21 11 views
5

Próbuję zasymulować limity czasu żądań usługi, aby przetestować moduł żądania węzła, który pozwala określić żądanie maks. Liczby prób ponowienia i opóźnienia ponowienia. Aby to przetestować, muszę użyć narzędzia nock do symulacji limitu czasu dla pierwszej X liczby żądań, a następnie pomyślnie odpowiedzieć na to samo żądanie. Wiem, że istnieje metoda "socketDelay()", aby opóźnić połączenie, ale jak określić pomyślną odpowiedź po tej pierwszej opóźnionej odpowiedzi?Node.js Nock symuluje limit czasu żądania i kolejny sukces.

mam to, co symuluje czas oczekiwania na pierwsze żądanie

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

ale jak mogę to zrobić szybciej reagować po to, aby symulować usługę odzyskiwanie? Szukam coś zrobić wzdłuż tych linii

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

Odpowiedz

8

będę odpowiedzieć na moje własne pytanie, od kiedy zorientowaliśmy się. Okazuje się, że nock pozwala na wykonywanie w kolejce mocks dla tego samego punktu końcowego, chociaż nie ma go w żadnej dokumentacji. Właśnie to symulowałem różne czasy opóźnień w żądaniach. Zauważmy, że różne wartości dla każdej odpowiedzi organizmu

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

Po użyciu modułu requestretry z timeout = 300 retryDelay = 500 i maxAttempts = 2, odpowiedź powinna być ciałem trzeciego żądanie od pierwszych dwóch przedziałach zewnątrz. Zauważ, że użyłem innej wartości dla każdej jednostki odpowiedzi, aby upewnić się, że faktycznie przekroczenia limitu czasu na dwóch pierwszych. Możesz zweryfikować, że pierwsze dwa żądania nie powiodły się, ponieważ wykonanie testu zajęło 1800 ms. 300ms (pierwszy timeout) + 500ms (opóźnienie) + 300ms (drugi limit czasu) + 500ms (opóźnienie) + 200ms (udane żądanie)

Powiązane problemy