importScript和worker-html.js失败的茉莉花/业力测试用例

时间:2020-05-12 22:16:47

标签: angular jasmine karma-jasmine angular-testing

如果我一起运行它们,那么我的几个测试用例将失败。他们各自都通过了。在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看到文件

1 个答案:

答案 0 :(得分:0)

我无法指出确切的问题。可能是由于使用了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策略将无法解​​决任何问题;相反,它只会导致进一步的阻塞发生。 ” 我做了很多事情来解决这个问题 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;
};

以上内容开始为我打印详细消息。其中一张印刷品为我提供了线索,表明问题可能与worker.js中的ace.js个文件有关,因为这是我所知道的唯一使用workers

的代码。

enter image description here

然后在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")) {...}
}

因此,我尝试通过调用loadWorkerFromBlob中的editor.session.setOption(...)来将ace设置为false,但是两者都没有。

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

我收到错误misspelled option loadWorkerFromBlob

我仍在找出原因。为了测试,我在option中更改了ace.js对象,然后我的测试用例开始工作。

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

};

更新-

loadWorkerFromBlob是全局选项,可以使用ace.config.set("loadWorkerFromBlob", false)进行配置。 也许useWorker无法正常工作,因为它是在尝试创建工作程序之后调用的。