【发布时间】: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-vcr 或 axios-vcr 的东西,但这些似乎依赖于明确地进入库来替换说,用 http 拦截版本调用 fetch,正在阅读“盒式磁带”包含预设响应的文件。
如果我能提供帮助,我正在寻找一种避免修补 3rd 方代码的方法,这就是我理解 VCR 适用于其他语言的方式。
大概,如果有一个 HTTP 客户端内置在节点中,那么这将是你修补函数的地方 - 我还没有遇到过执行此操作的特定库。
运行整个 HTTP 服务器
另外,我可以看到像 vcr.js 或 yakbak 这样的库,它们基本上设置了一个 HTTP 服务器,该服务器在各种 url 处为您定义的 JSON blob 提供服务,例如在 http://localhost:8100/users/ 处提供保存的 users.json 文件
这没关系,但同样,如果我不需要启动整个 HTTP 服务器并发出实际的 HTTP 请求,那就太好了。
【问题讨论】:
-
json-server 呢?
标签: javascript node.js api http testing