像nock这样的nodejs模拟模块有什么好处?

时间:2019-08-13 15:02:16

标签: 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);
    }
})

1 个答案:

答案 0 :(得分:2)

当您的应用程序在处理入站请求时进行出站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进行特定值响应的边缘测试