【问题标题】:What's the easiest or idiomatic way to mock HTTP requests in 3rd party js libraries with node / js使用 node / js 在 3rd 方 js 库中模拟 HTTP 请求的最简单或惯用的方法是什么
【发布时间】:2018-01-24 09:30:08
【问题描述】:

当我使用 Ruby 或 Python 编写代码时,我已经能够使用像 VCR 这样的库来拦截 HTTP 请求并记录它们,因此,例如,当我在测试中使用第 3 方 API 时,我可以将该响应保存为夹具,而不是手动构建一个巨大的模拟对象来检查行为。

它并不完美,但是当我一直在探索针对第三方 API 发出哪些 API 请求(通常包装第三方库)然后编写测试来检查这种行为时,它节省了很多时间。

现在 JS 中最接近这个的东西是什么?

我正在寻找一个开源工具,我可以在我的测试文件中使用require,所以当我运行可能调用第三方 API 方法的测试时,我不会发出昂贵、缓慢的 HTTP 请求。我想代码可能看起来有点像:

it('does something I expect it to', () {

  // set up some state I care about
  let someVar = someSetupCode()

  let library = thirdPartyLib({creds: 'somecreds'})
  library.someMethod()

  // check state has changed 
  expect(someVar.value).toBe('what I Expect after calling someMethod')

})

在这里,当我调用 library.someMethod() 时,我不是访问实际的服务器,而是检查服务器将返回的值,这些值是我之前保存的。

猴子修补现有库或函数

我看到了 fetch-vcraxios-vcr 的东西,但这些似乎依赖于明确地进入库来替换说,用 http 拦截版本调用 fetch,正在阅读“盒式磁带”包含预设响应的文件。

如果我能提供帮助,我正在寻找一种避免修补 3rd 方代码的方法,这就是我理解 VCR 适用于其他语言的方式。

大概,如果有一个 HTTP 客户端内置在节点中,那么这将是你修补函数的地方 - 我还没有遇到过执行此操作的特定库。

运行整个 HTTP 服务器

另外,我可以看到像 vcr.jsyakbak 这样的库,它们基本上设置了一个 HTTP 服务器,该服务器在各种 url 处为您定义的 JSON blob 提供服务,例如在 http://localhost:8100/users/ 处提供保存的 users.json 文件

这没关系,但同样,如果我不需要启动整个 HTTP 服务器并发出实际的 HTTP 请求,那就太好了。

【问题讨论】:

标签: javascript node.js api http testing


【解决方案1】:

哦,等等,看起来来自linkedin 的sepia 至少适用于nodejs。

我没有深入研究它,但如果你一直在使用它,我会欢迎它。

【讨论】:

    【解决方案2】:

    可能SoapUI 适合你。尽管它的名字,它也适用于 REST API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-21
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多