importScript 和 worker-html.js 失败 jasmine/karma 个测试用例

importScript and worker-html.js are failing jasmine/karma test cases

如果我 运行 我的几个测试用例一起失败。单独地,他们都通过了。在 jasmine.js 中添加一些调试代码后,否则会抛出 object thrown error,我发现所有与代码相关的错误都类似于

错误列表类似于Uncaught error prop: isTrusted, value: trueerror prop: message, value: Uncaught error prop: filename, value: blob:http://localhost:9882/7098c1f5-dfab-4a9e-8259-654164f3306d

部分 prop: filename, value: blob:http://localhost:9882/7098c1f5-dfab-4a9e-8259-654164f3306d 映射到 importScripts('http://localhost:9882/ace-builds/worker-html.js');

我不确定这里要做什么,一起执行时如何通过测试用例。

路径正确,我可以在 http://localhost:9882/ace-builds/worker-html.js

看到文件

我无法确定确切的问题。可能是由于使用了 blob: 来解决这个问题是在 content security policy issue 附近。但是,正如这里 (do I need to set content-security policy when running jasmine/karma test cases) 所指出的,如果它是 csp 那么问题应该一直发生而不是随机发生

” 浏览器在 devtools 控制台中记录了哪些消息?如果它因为 CSP 而失败,那么浏览器将在 devtools 控制台中记录特定的错误消息,明确说明它阻止了什么以及为什么。因此,如果您在 devtools 控制台中没有看到任何消息,那么您可以安全地排除 CSP 是您所看到的失败的原因。如果是 CSP 造成的,失败就不是随机的;相反,他们会保持一致。此外,将 CSP 策略添加到尚无 CSP 策略的文档不会解决任何问题;相反,它只会导致进一步的阻塞发生。 “ 我做了很多事情来解决这个问题 1) 我更改了 jasmine.js 以添加调试打印,这可以给我一些关于正在发生的事情的提示。

getJasmineRequireObj().ExceptionFormatter = function() {
...
    if(error){
           // message+=error;
            for(var propName in error) {
              propValue = error[propName]
              message+='\nError object: Property name: '+propName+', value: '+propValue;
            }
          }
return message;
};

上面开始为我打印详细消息。其中一张打印件告诉我问题可能出在 ace.js 中的 worker.js 个文件,因为这是我所知道的唯一使用 workers

的代码

然后在ace.js论坛上,我发现我可以完全停止使用workers

” ace 正在尝试加载 webworker 以进行语法检查 https://github.com/ajaxorg/ace/blob/master/lib/ace/worker/worker_client.js#L53,您可以使用 session.setOption("useWorker", false) 来禁用它 “ 我试过了,但没用。我在代码中进一步挖掘并在 ace.js

中找到了这篇文章
function createWorker(workerUrl) {
if (config.get("loadWorkerFromBlob")) {...}
}

所以我尝试通过调用 aceeditor.session.setOption(...) 来将 loadWorkerFromBlob 设置为 false,但那也没有。

this.editor.setOptions({
  readOnly: this.readonlyFormStatus,
  loadWorkerFromBlob:false
});

我收到错误 misspelled option loadWorkerFromBlob

我还在想为什么。只是为了测试,我更改了 ace.js 中的 option 对象,然后我的测试用例开始工作。

var options = {
....
    loadWorkerFromBlob: false,

};

更新-

loadWorkerFromBlob 是一个全局选项,可以用 ace.config.set("loadWorkerFromBlob", false) 配置。 也许 useWorker 没有工作,因为它是在尝试创建 worker 之后调用的。