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")) {...}
}
所以我尝试通过调用 ace
的 editor.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 之后调用的。
如果我 运行 我的几个测试用例一起失败。单独地,他们都通过了。在 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")) {...}
}
所以我尝试通过调用 ace
的 editor.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 之后调用的。