我开发了一个nodejs应用,该应用获取url并根据url中的参数发送响应(json或xml)(我必须使用SOAP开发POST和GET / POST)。
但是我看到一些模拟模块,例如nock,我问自己,与我自己的应用程序相比,这些模块有什么好处?
我的代码示例:
app.get('/uri/to/call/', function(req, res) {
if(req.query.username=='John'){
res.json(passedMock);
}else{
res.json(failedMock);
}
})
最佳答案
当您的应用在处理入站请求的同时进行出站HTTP调用时,网络模拟库(例如Nock)的好处就会发挥作用。
想象一个基本的应用程序,如下所示,它会在响应之前从第三方收集数据:
app.get('/uri/to/call/', function(req, res) {
http.get('http://some.third.party.example.com', dataResp => {
// process data in some way
resp.json(data)
}
})
现在,您可以/应该编写许多不同类型的测试来测试此应用程序,但是一类测试将包括您的应用程序如何响应和处理错误,而在运行测试时无需实际调用第三方的API。
坚持使用Nock,您可以编写一个测试,通过首先模拟内部请求来确认您的应用处理了来自第三方的错误,如下所示:
nock('http://some.third.party.example.com')
.get('/')
.replyWithError('oh no!')
然后调用您的应用并根据响应断言。
这种测试不仅针对错误情况。有很多原因导致您在测试期间不理想地打第三方。
他们的API没有沙盒,也没有限制请求或每个请求的费用
测试套件的整体运行时间
Edgecase测试,很难让其API以特定值响应
关于node.js - 像nock这样的nodejs模拟模块有什么好处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57480534/