angular - importScript 和 worker-html.js 未能通过 jasmine/karma 测试用例
问题描述
如果我一起运行它们,我的几个测试用例会失败。单独他们都通过了。在添加了一些调试代码后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:
which was added to 解决 问题出现了content security policy issue
。但是,正如这里所指出的(我是否需要在运行 jasmine/karma 测试用例时设置内容安全策略),如果是这样,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
然后在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
通过调用设置为 false editor.session.setOption(...)
,ace
但也没有。
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 没有工作,因为它是在尝试创建工作者之后调用的。
推荐阅读
- c++ - 如何在 Qt creator 4.8 中使用 C++11
- php - 将对象值替换为数组
- reactjs - 你能同时使用 React-hooks 和 redux 吗?
- c++ - 使用来自 SYSTEM 级别进程(Windows 服务)的登录用户上下文来模拟和运行任何方法:
- google-bigquery - Bigquery 命令行中的 --job_property
- excel - 缺少 Excel 库导致不需要/使用它的用户的参考错误
- java - 创建名为“serviceController”的 bean 时出错:自动装配依赖项的注入失败;
- angular - 在 2 个子组件之间传递变量会产生 ExpressionChangedAfterItHasBeenCheckedError 错误
- javascript - NavigationTimingAPI 可以用于异步调用吗?
- javascript - 对象属性更改时如何在vue js中获取对象索引?