Node.js诺克模拟请求超时及后续成功
Node.js Nock simulate request timeout and subsequent success
我正在尝试模拟服务请求超时以测试节点请求重试模块,该模块允许您指定请求最大尝试重试次数和重试延迟。为了对此进行测试,我需要使用 nock 模拟前 X 个请求的超时,然后成功响应同一个请求。我知道有 'socketDelay()' 方法可以延迟连接,但如何在第一次延迟响应后指定成功响应?
我有这个,它模拟了第一个请求的超时
//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');
既然我想通了,我会回答我自己的问题。事实证明,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');
使用超时=300、重试延迟=500 和最大尝试次数=2 的requestretry
模块后,由于前两次超时,响应应该是第三次请求的正文。请注意,我为每个响应主体使用了不同的值,以确保我实际上在前两个响应上超时。您可以验证前两个请求是否失败,因为测试需要 1800 毫秒才能完成。 300ms(第一次超时) + 500ms(延迟) + 300ms(第二次超时) + 500ms(延迟) + 200ms(请求成功)
我正在尝试模拟服务请求超时以测试节点请求重试模块,该模块允许您指定请求最大尝试重试次数和重试延迟。为了对此进行测试,我需要使用 nock 模拟前 X 个请求的超时,然后成功响应同一个请求。我知道有 'socketDelay()' 方法可以延迟连接,但如何在第一次延迟响应后指定成功响应?
我有这个,它模拟了第一个请求的超时
//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');
既然我想通了,我会回答我自己的问题。事实证明,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');
使用超时=300、重试延迟=500 和最大尝试次数=2 的requestretry
模块后,由于前两次超时,响应应该是第三次请求的正文。请注意,我为每个响应主体使用了不同的值,以确保我实际上在前两个响应上超时。您可以验证前两个请求是否失败,因为测试需要 1800 毫秒才能完成。 300ms(第一次超时) + 500ms(延迟) + 300ms(第二次超时) + 500ms(延迟) + 200ms(请求成功)