当我用Ruby或Python编码时,我已经能够使用像VCR这样的库来拦截HTTP请求并记录它们,所以当我在测试中遇到第三方API时,我可以将该响应保存为夹具,而不是手动构建一个巨大的模拟对象来检查行为。
这并不完美,但是当我一直在探索针对第三方API的API请求时(通常包装第三方库),然后编写测试以检查此行为,它已经节省了大量时间。 / p>
我正在寻找一个我可以在我的测试文件中$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-vcr或axios-vcr,但这些似乎依赖于明确地进入一个库来替换say,而是使用http拦截版本调用library.someMethod()
,正在阅读包含预设回复的“盒式磁带”文件。
我正在寻找一种避免修补第三方代码的方法,如果我可以帮助它,这就是我理解VCR适用于其他语言的方式。
据推测,如果有一个HTTP客户端在某个地方构建到节点中,那么那就是你要修补一个函数的地方 - 我没有遇到过这样做的特定库。
运行整个HTTP服务器
或者,我可以看到像vcr.js或yakbak这样的库,它们实际上是在各种网址上设置一个服务于您定义的JSON blob的HTTP服务器,比如提供保存的fetch
文件在users.json
这没关系,但是,如果我不需要启动整个HTTP服务器,并发出实际的HTTP请求,那就太棒了。