【问题标题】:Testing with JEST and nock causing 'Cross origin null forbidden'使用 JEST 和 nock 进行测试导致“禁止跨源 null”
【发布时间】:2018-08-29 09:31:39
【问题描述】:

我正在尝试使用 JEST 测试我的服务并使用 nock 模拟端点。服务是这样的

export async function get(id) {
    const params = {
      mode: 'cors',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    };

    let response = await fetch(`{$API}/projects/${id}`, params);

    return response.json();
}

测试:

import { 
  get 
} from './project';
import nock from 'nock';
const fetchNockProject = nock($API)
                          .get('/projects/1')
                          .reply('200', {});

      const data = await get(1);

      expect(data).resolves.toEqual(project);

当我运行测试时出现错误:

console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29 错误:禁止跨域 null

TypeError:网络请求失败

知道为什么虚拟控制台会抛出这个,因为这只是服务。

【问题讨论】:

    标签: jestjs nock


    【解决方案1】:

    我找到了与 CORS 相关的问题的解决方案。诺克模拟应该是:

    fetchNockProject = nock($API)
                       .defaultReplyHeaders({
                          'access-control-allow-origin': '*',
                          'access-control-allow-credentials': 'true' 
                        })
                       .get('/projects/1')
                       .reply('200', project);
    

    【讨论】:

    • 谢谢,你救了我!
    • 你是英雄。
    • nock() 是 javascript 函数吗?可以提供链接吗?
    【解决方案2】:

    好吧,发布的答案对我不起作用,虽然我没有说这是错误的,但我想我应该分享对我有用的东西

    就我而言,我的服务器是 ASP.NET Core。我没有使用提供的Cors middleware module。我添加并配置了它,并解决了我的问题,没有更改我的 javascript 文件。

    【讨论】:

    • OP 正在模拟 fetch(),因此还需要模拟“access-control-allow-origin”标头。由于您要连接到真实服务器,因此您希望服务器发送真实的此类标头(这是 CORS 中间件所做的)
    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 2018-03-30
    • 2020-03-06
    • 2018-07-28
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多