使用 JEST 和 nock 进行测试导致“禁止跨源 null”
Posted
技术标签:
【中文标题】使用 JEST 和 nock 进行测试导致“禁止跨源 null”【英文标题】:Testing with JEST and nock causing 'Cross origin null forbidden' 【发布时间】: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:网络请求失败
知道为什么虚拟控制台会抛出这个,因为这只是服务。
【问题讨论】:
【参考方案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 中间件所做的)以上是关于使用 JEST 和 nock 进行测试导致“禁止跨源 null”的主要内容,如果未能解决你的问题,请参考以下文章
CORS 错误 - 错误:禁止跨源 http://localhost - 仅在 ReactJS/Jest 测试中