这对我来说似乎有点奇怪。我试图用Jest测试一个实际的(即真实的网络)请求。
以下是经过测试的场景:
- 测试一个没有头文件的外部API(fixer.io)〈---这可以工作
- 测试带有标头的本地API服务器**〈---这不起作用**
- 使用来自
node
终端的标头测试相同的本地API**〈---此操作有效**
这种行为背后的原因是什么?解决办法是什么?
//This WORKS
test('testing no headers', () => {
return axios.get('http://api.fixer.io/latest')
.then( res => console.log(res) )
});
//This DOES NOT work
test('testing no headers', () => {
return axios.get('http://localhost:3000/users/4/profile',
{headers:{authorization:`Bearer ${mytoken}`}})
.then( res => console.log(res) )
});
//...
//Node Terminal
//This WORKS
> axios.get('http://localhost:3000/users/4/profile',
{headers:{authorization:`Bearer ${mytoken}`}})
.then( res => console.log(res) )
5条答案
按热度按时间uklbhaso1#
这可能是一个Jest配置问题。我解决了在package.json中强制“node”作为jest环境的问题:
“笑话”:{“测试环境”:“节点”}
参见文档:https://facebook.github.io/jest/docs/configuration.html#testenvironment-string
ifsvaxew2#
有趣的是,axios通过primary使用XMLHttpRequest,而 AJAX 请求不能跨域访问,所以您的测试失败了,所以您可以通过设置axios适配器让代码通过。
通过axios/defaults.js查找原因
解决方案将axios适配器更改为http
package.json中的解决方案变更jest测试URL
则测试可以经由 AJAX 访问HTTP
42fyovps3#
Jest允许你设置一个安装脚本文件。这个文件在其他任何事情之前都是必需的,并且让你有机会修改测试运行的环境。这样你就可以在axios加载之前取消XMLHttpRequest的设置,并且在导入被提升之后评估适配器类型。www.example.comhttps://facebook.github.io/jest/docs/configuration.html#setuptestframeworkscriptfile-string
这对我很有效:
o0lyfsai4#
我通过添加以下内容解决了这个问题
对于特定的测试用例文件,设置global.XMLHttpRequest = undefined或env=node会导致其他测试用例失败。
mjqavswn5#
我在Next.js项目上工作,在那里我有前端和后端测试,将
testEnvironment
设置为"node"不起作用。我将
jest.config.js
配置为并添加了
所有后端测试。