Jestjs 如何将运行在jest中的axios配置为在POST之前不发送选项?
在node.js中,正如预期的那样,发送了一个POST响应(正如我用httpToolkit验证的那样) 但是在一个Jestjs 如何将运行在jest中的axios配置为在POST之前不发送选项?,jestjs,axios,Jestjs,Axios,在node.js中,正如预期的那样,发送了一个POST响应(正如我用httpToolkit验证的那样) 但是在一个jest测试中执行同样的操作,axios首先发送一个选项请求。我正在运行的服务无法处理该问题(不是example.com) 是否有办法说服/配置jest或axios,使axios不会神奇地决定发送选项?这与CORS无关——它的服务器代码与服务器代码对话,但显然,axios中的某些东西决定了它是合适的。阅读本文,我的问题的解决方案就是下面的标题。看笑话。这个问题确实有很多关于不同关注点
jest
测试中执行同样的操作,axios
首先发送一个选项请求。我正在运行的服务无法处理该问题(不是example.com)
是否有办法说服/配置jest
或axios
,使axios
不会神奇地决定发送选项
?这与CORS无关——它的服务器代码与服务器代码对话,但显然,axios
中的某些东西决定了它是合适的。阅读本文,我的问题的解决方案就是下面的标题。看笑话。这个问题确实有很多关于不同关注点的讨论,所以YMMV
/**
* This is required to prevent axios from acting like it is in a browser
* environment and doing OPTIONS preflights, etc.
*
* @jest-environment node
*/
const axios = require('axios');
describe('Simple Post', () => {
test('POST', async () => {
// No preflight OPTIONS request sent when jest-environment is node
const x = await axios.post('http://example.com',
{data: {foo: 42}},
{headers: {'X-Special-Token': 'DATA'}});
expect(x.status).toBe(200);
});
});
哇,真是个惊喜!检查这条线索,如果这里有任何建议对你有用的话,请写一个“官方答案”。有趣的是,我读了这篇文章,然后想了想——这里发生的事情太多了。并切换到
got
而不是axios
,问题得以解决。但我再次访问了它,它是“简单的”。是的,axios委托给jest,委托给jsdom,后者模仿浏览器的行为并发送选项。发生了两件事。
const axios = require('axios');
describe('Simple Post', () => {
test('POST', async () => {
// Axios HERE seems to send an OPTIONS request first...
const x = await axios.post('http://example.com',
{data: {foo: 42}},
{headers: {'X-Special-Token': 'DATA'}});
expect(x.status).toBe(200);
});
});
/**
* This is required to prevent axios from acting like it is in a browser
* environment and doing OPTIONS preflights, etc.
*
* @jest-environment node
*/
const axios = require('axios');
describe('Simple Post', () => {
test('POST', async () => {
// No preflight OPTIONS request sent when jest-environment is node
const x = await axios.post('http://example.com',
{data: {foo: 42}},
{headers: {'X-Special-Token': 'DATA'}});
expect(x.status).toBe(200);
});
});