如何使用 mocha sinon 存根对请求库进行单元测试?

How to unit test Request library with mocha sinon stub?

如何使用 Mocha、sinon 和 chai 测试 NPM 请求库? 我得到一个 Error: getaddrinfo ENOTFOUND。 URL 应该无关紧要,因为我预计 yields 的值为 return,无论 url

是什么
describe(`api tests`, () => {
  it(`should return`, async () => {
    sinon.stub(request, `get`).yields(null, null, JSON.stringify({test: `teststub`}))


    return apiFunction.then(res => {
      assert.equal(res.body, {test: "stubtest"})
    })
  })
})



 const apiFunction () => {  
    request(
        {
          url: `http://url`
        },
        (err, response, body) => {
          console.log(body) // should be {test: "subtest"}
      })
}

所以答案是 sinon 无法存根独立函数,它只能存根有父函数的函数,例如Object.function.

可以使用 rewire proxyquire,但是使用 Jest 测试运行器而不是 mocha 感觉是更好的解决方案,因为 jest 提供了更完整的开箱即用功能,包括模拟和断言