我在Jest 地设置e2e测试,我想让Fetch在我调用它时发送我的Cookie,如下所示:

const userinfo = await fetch('/api/auth/me')

我已经设置了我的JEST配置

testEnvironmentOptions: {
  url: 'http://localhost:5544/'
},

并将import 'whatwg-fetch'添加到我的jest.setup.js文件中,这很棒,它让我的FETCH请求在相对路径上工作.然而,我无论如何也不能拿来送来我的作者cookies .

我已经将我的cookie添加到文档中,如下所示

  Object.defineProperty(window.document, 'cookie', {
    writable: true,
    value: 'auth=...',
  });

我try 将Fetch credentials属性设置为includesame-origin,但没有成功.我通读了CORS指南,但这都是关于如何让浏览器设置cookie的--在我的例子中,我已经自己设置了cookie.在我的服务器上,请求总是不附加Cookie.我被难住了,以前有人解决过这个问题吗?

最新情况: 我try 了更多的东西,但都没有成功:

  1. 将域和路径添加到Cookie
  Object.defineProperty(window.document, 'cookie', {
    writable: true,
    value: 'auth=...;domain=localhost:5544;path=/',
  });
  1. 添加"同源"模式以验证请求是否为同源(即,请求通过时没有错误)
const userinfo = await fetch('/api/auth/me', {credentials: "same-origin", mode: 'same-origin'});
  1. 在服务器端判断传入请求的标头:
{
  referer: 'http://localhost:5544/',
  'user-agent': 'Mozilla/5.0 (darwin) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/20.0.3',
  'accept-language': 'en',
  accept: '*/*',
  'accept-encoding': 'gzip, deflate',
  host: 'localhost:5544',
  connection: 'keep-alive'
}

这些都没有帮助,请求仍然可以在没有附加Cookie的情况下通过

推荐答案

拿到了!!我花了一段时间来研究发生了什么,但基本上jsdom有自己的cookie implementation,所以调用Object.defineProperty覆盖了jsdom中的实现.太棒了.你所要做的就是设置

document.cookie = 'auth=...'

你就可以走了.我还发现Fetch默认为{credentials: 'same-origin'},因此我的调用可以只是:

await fetch(`/api/auth/me`)

所有的东西都是金子.

Javascript相关问答推荐

promise .all()永不解决

原型链中的同一财产怎么会有不同的价值?

如何用变量productId替换 1"

如何在不指定宽度和高度的情况下显示来自网址的下一张图像

如何指定1条记录1个表?

在NextJS中使用计时器循环逐个打开手风琴项目?

如何获取转换字节的所有8位?

当在select中 Select 选项时,我必须禁用不匹配的 Select

如何使用侧边滚动按钮具体滚动每4个格?

我应该在redux reducer中调用其他reducer函数吗?

如何在Connect 4游戏中 for each 玩家使用位板寻找7形状?

InDesign—创建一个独立的窗口,在文档中进行更正时保持打开状态

使用javascript将Plotly Expandable Sparkline转换为HighCharter Plot在bslib卡中

Websocket错误—有一个或多个保留位开启:reserved1 = 1,reserved2 = 0,reserved3 = 0

为什么客户端没有收到来自服务器的响应消息?

在表单集中保存更改时删除';禁用';

在Odoo中如何以编程方式在POS中添加产品

我的NavLink活动类在REACT-ROUTER-V6中出现问题

Angel Auth Guard-用户只有在未登录时才能访问登录页面,只有在登录时才能访问其他页面

如何在移动设备中使用JAVASSCRIPT移除点击时的焦点/悬停状态