【问题标题】: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 文件中(所有测试的初始化代码),

    1. 将脚本元素的src 设置为相对路径而不是完全限定路径。
    2. 设置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,
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 2015-01-13
      • 2015-08-27
      • 2012-02-28
      • 2013-01-23
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      相关资源
      最近更新 更多