node.js - 像nock这样的nodejs模拟模块有什么好处?

标签 node.js express mocking body-parser nock

我开发了一个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 没有沙箱,也没有限制请求或按请求收费
  • 测试套件的总体运行时间
  • 边缘情况测试,其中 API 很难响应特定值

关于node.js - 像nock这样的nodejs模拟模块有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57480534/

相关文章:

javascript - 在迭代具有内部异步代码的对象循环的对象时,如何正确跟踪变量?

node.js - Mailchimp:提供的 API key 链接到不同的数据中心

node.js - 在 ExpressJS 中打印 session 对象

node.js - 更改 aws kcl 的故障转移时间

javascript - JSON.stringify() 无法正常工作 - 第二个参数消失

java - Apache Camel MockEndpoint 模拟输出

node.js - Express 和 mongodb 文章

javascript - 根据 URL 加载不同的 EJS

c# - 你如何模拟 ILogger LogInformation

c# - 在 C#/.NET 中模拟没有无参数构造函数的对象