如何让node + jsdom中的mock service worker 运行(用于测试)接收跨域cookie?

How to make mock service worker running in node + jsdom (for tests) receive cross-domain cookies?

我有一个带有 Jest + MSW 的 reproduction repo,我正在尝试让 MSW 接收跨域 cookie。默认情况下,JSDOM 在 http://localhost 上加载。当向该域发送提取请求时,MSW 也在该域上侦听,一切正常,已收到 cookie。

但是,当尝试向另一个域发送请求时,例如 http://localhost:4444,没有 cookie 被发送到 MSW。奇怪的是,如果我注释掉 MSW 并在同一个端口上启动一个快速服务器,它确实会收到所有的 cookie。为什么他们被发送到快递服务器而不是 MSW?

最后,同样奇怪的是,如果MSW和express服务器都是运行,MSW在4444,Express在5555,express服务器将不再接收cookies。就好像 MSW 的 beforeAll(() => server.listen()); 以某种方式杀死了跨域 cookie。

Cookie 设置:

setCookie("local00=L00", "http://localhost");
setCookie("local44=L44", "http://localhost:4444");
setCookie("local55=L55", "http://localhost:5555");
setCookie("local66=L66", "http://localhost:6666");
fetch(http://localhost)      --> handler("http://localhost"):     OK! all cookies received

fetch(http://localhost:4444) --> handler("http://localhost:4444): No cookies received
                             OR
                             --> express("http://localhost:4444): OK! all cookies received

fetch(http://localhost:4444) --> handler("http://localhost:5555): No cookies received
                             AND
                             --> express("http://localhost:4444): No cookies received

如何向 MSW 发送跨源请求并让它接收 cookie?

MSW 当前在 JSDOM 中 运行 时不支持 window.fetch 上的 credentials 选项(参见 related issue, and the pull request that adds that support)。期待在下一个次要版本中添加此功能。谢谢