【问题标题】:KarmaJS Preload Secured CDN ScriptKarmaJS 预加载安全 CDN 脚本
【发布时间】:2022-07-08 08:58:36
【问题描述】:
我正在尝试为 Karma-Jasmine 测试预加载受保护的 CDN 脚本(公司政策规定所有 url 都是安全的)。尝试通过创建元素const scriptElememtn = document.createElement('script'); 并将元素添加到文档中,document.head.append(scriptElement); 因为它是安全的,所以添加了身份验证cookie document.cookie = "auth=0bec1d8f-e586-4e60-ace1-06935d5e0b41". 因为CDN 是公司域(dev.company.com/components/v1 ) 并且 karma 是 localhost,它不会将 cookie 与请求一起发送。
我的问题是
- 为什么没有在 CDN 请求中发送 cookie。
- 如何预加载脚本?
- 我可以使用 axios 库下载脚本吗?
【问题讨论】:
标签:
javascript
karma-jasmine
cdn
【解决方案1】:
通过在 karma.conf.js 文件中设置代理解决了这个问题。在 src/test.js 文件中(所有测试的初始化代码),
- 将脚本元素的
src 设置为相对路径而不是完全限定路径。
- 设置
document.cookie
const originalKarmaLoad = (window as any).karma.loaded;
(window as any).__karma__.loaded = async function () {
const wcplScript = document.createElement('script');
const waitForLoad = new Promise((resolve, reject) => {
wcplScript.onload = () => resolve(0);
wcplScript.onerror = () => {
console.error('Failed to load CDNs');
reject();
};
});
document.cookie = `${cookie.name}=${cookie.value}`;
wcplScript.src = '/cdn/lib/'; // use the relative path
wcplScript.async = false;
wcplScript.type = 'module';
document.body.insertBefore(wcplScript, document.body.lastChild);
await waitForLoad;
originalKarmaLoad.call(this);
};
在 karma.conf.js 下,设置代理指向 CDN,
{
.....
proxies: {
'/cdn/lib/': {
target: 'https://mycompany.com/cdn/lib',
changeOrigin: true,
},
},
proxyValidateSSL: false,
}