Jestjs 如何将运行在jest中的axios配置为在POST之前不发送选项?

Jestjs 如何将运行在jest中的axios配置为在POST之前不发送选项?,jestjs,axios,Jestjs,Axios,在node.js中,正如预期的那样,发送了一个POST响应(正如我用httpToolkit验证的那样) 但是在一个jest测试中执行同样的操作,axios首先发送一个选项请求。我正在运行的服务无法处理该问题(不是example.com) 是否有办法说服/配置jest或axios,使axios不会神奇地决定发送选项?这与CORS无关——它的服务器代码与服务器代码对话,但显然,axios中的某些东西决定了它是合适的。阅读本文,我的问题的解决方案就是下面的标题。看笑话。这个问题确实有很多关于不同关注点

在node.js中,正如预期的那样,发送了一个POST响应(正如我用httpToolkit验证的那样)

但是在一个
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);
  });
});