使用node / js在第三方js库中模拟HTTP请求的最简单或惯用方法是什么

时间:2018-01-24 09:30:09

标签: javascript node.js api http testing

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

这并不完美,但是当我一直在探索针对第三方API的API请求时(通常包装第三方库),然后编写测试以检查此行为,它已经节省了大量时间。 / p>

这几天JS中最接近的是什么?

我正在寻找一个我可以在我的测试文件中$fileTitle = $_GET['title']; $rawData = $_GET['data']; $txtFileLineData = preg_replace('/\+/', ' ', $rawData); $txtFileTitle = $fileTitle.".txt"; $txtFileStatus = file_put_contents($txtFileTitle, $txtFileLineData, FILE_APPEND); if ($txtFileStatus != false) { echo "SUCCESS: data written to txt file"; } else { echo "FAIL: could not write to txt file"; } 的开源工具,所以当我运行测试时我可以在第三方API上调用方法时,我不会做出昂贵,缓慢的HTTP请求。我想代码看起来有点像:

require

在这里,当我拨打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') }) 时,我正在检查服务器将返回的值,而不是点击实际的服务器,我之前已保存过。

猴子修补现有的库或函数

我看到的内容fetch-vcraxios-vcr,但这些似乎依赖于明确地进入一个库来替换say,而是使用http拦截版本调用library.someMethod(),正在阅读包含预设回复的“盒式磁带”文件。

我正在寻找一种避免修补第三方代码的方法,如果我可以帮助它,这就是我理解VCR适用于其他语言的方式。

据推测,如果有一个HTTP客户端在某个地方构建到节点中,那么那就是你要修补一个函数的地方 - 我没有遇到过这样做的特定库。

运行整个HTTP服务器

或者,我可以看到像vcr.jsyakbak这样的库,它们实际上是在各种网址上设置一个服务于您定义的JSON blob的HTTP服务器,比如提供保存的fetch文件在users.json

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

2 个答案:

答案 0 :(得分:0)

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

我没有太多关注,但如果你一直在使用它,我会欢迎你的评论。

答案 1 :(得分:0)

可能SoapUI适合您。虽然它的名称,它也适用于REST API。