【问题标题】:What's benefits of nodejs mock module like nock?像 nock 这样的 nodejs 模拟模块有什么好处?
【发布时间】:2019-12-20 04:12:11
【问题描述】:

我开发了一个 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);
    }
})

【问题讨论】:

    标签: node.js express mocking body-parser nock


    【解决方案1】:

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

    【讨论】:

    • 我明白了。所以就我而言,nock 并不是很有用。我的应用程序将位于服务器中,以替换 Web 服务调用的所有“合作伙伴”。对于每个 url,只能发送 2 个响应:OK (200) 或 KO (500)。没有第三者,只检查参数并回复相应的答案。
    猜你喜欢
    • 2016-05-09
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2023-04-05
    • 2013-06-01
    • 2020-04-09
    相关资源
    最近更新 更多