Unit testing 在Internet Explorer中运行Karma时,在aurelia测试中使用WaitForElement
我们目前正在开发一个需要在InternetExplorer11上运行的Aurelia应用程序。在我们尝试使用Karma ie launcher在IE11上运行Karma/Tape测试之前,一切都很好 Karma正确启动,一些测试正在执行,直到遇到使用Unit testing 在Internet Explorer中运行Karma时,在aurelia测试中使用WaitForElement,unit-testing,internet-explorer,karma-runner,aurelia,Unit Testing,Internet Explorer,Karma Runner,Aurelia,我们目前正在开发一个需要在InternetExplorer11上运行的Aurelia应用程序。在我们尝试使用Karma ie launcher在IE11上运行Karma/Tape测试之前,一切都很好 Karma正确启动,一些测试正在执行,直到遇到使用waitForDocumentElement的测试。由于waitForDocumentElement使用承诺,我告诉自己,太好了,我只需要将一些Promisepolyfills加载到Karma中,一切都会像使用Chrome一样开始工作。但是,显然没有
waitForDocumentElement
的测试。由于waitForDocumentElement
使用承诺,我告诉自己,太好了,我只需要将一些Promise
polyfills加载到Karma中,一切都会像使用Chrome一样开始工作。但是,显然没有
所以,最后是问题。有没有办法让我的测试在Karma上运行,使用Karma ie launcher以IE11为目标,并且能够在测试中使用waitForDocumentElement
。这似乎是罪魁祸首,因为它使用承诺
如果需要的话,我可以在我的项目旁边建立一个样本回购协议
谢谢
编辑:
这是“堆栈空间不足”错误的堆栈跟踪。对于记录,rawValue是一个可绑定的属性,我试图在waitForDocumentelement
中断言它,这样绑定和所有操作都有时间完成它们的工作
WARN: 'Unhandled rejection TypeError: Unable to get property 'rawValue' of undefined or null reference
at Anonymous function (http://localhost:9876/base/dist/_test/components/aurelia-numeric-input/aurelia-numeric-input.spec.js?ea0d4f3a76b6b818e30e08a7cbbc07dc5c11e02a:31:17)
at r (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:31:9351)
at i.prototype._settlePromiseFromHandler (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:14559)
at i.prototype._settlePromise (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:15364)
at i.prototype._settlePromise0 (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:16065)
at i.prototype._settlePromises (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:17395)
at r.prototype._drainQueue (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:29:3054)
at r.prototype._drainQueues (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:29:3112)
at drainQueues (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:29:1236)
at Anonymous function (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:31140)'
WARN: 'Unhandled rejection TypeError: Unable to get property 'rawValue' of undefined or null reference
at Anonymous function (http://localhost:9876/base/dist/_test/components/aurelia-numeric-input/aurelia-numeric-input.spec.js?ea0d4f3a76b6b818e30e08a7cbbc07dc5c11e02a:36:17)
at r (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:31:9351)
at i.prototype._settlePromiseFromHandler (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:14559)
at i.prototype._settlePromise (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:15364)
at i.prototype._settlePromise0 (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:16065)
at i.prototype._settlePromises (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:17395)
at r.prototype._drainQueue (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:29:3054)
at r.prototype._drainQueues (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:29:3112)
at drainQueues (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:29:1236)
at Anonymous function (http://localhost:9876/base/node_modules/bluebird/js/browser/bluebird.min.js?3d186ac6d244691754303d3153839bf42b57f7d1:30:31140)'
WARN: 'Unhandled rejection Error: Out of stack space
at _compileElement (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2691:7)
at _compileNode (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2547:11)
at compile (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2516:7)
at _compileElement (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2721:9)
at _compileNode (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2547:11)
at compile (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2516:7)
at _compileElement (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2721:9)
at _compileNode (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2547:11)
at compile (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2516:7)
at _compileElement (http://localhost:9876/base/node_modules/aurelia-templating/dist/amd/aurelia-templating.js?1766dc2dd0fa5489caa6a2c286fad9ab686c2f09:2721:9)'
Karma在名为的窗口上创建一个属性,该属性列出与Karma.conf.js中的模式匹配的文件。通常,在测试入口点模块中会有一些代码,这些代码会减少这个文件名列表,并剥离扩展名,等等,这样它们就会成为适合加载程序的模块名列表。。。在您的案例中是requirejs;)
然后将此模块名称数组分配给requirejs配置的deps
属性,这会导致requirejs在调用分配给requirejs配置的回调
属性的函数之前加载所有模块名称
我一直在手动添加bluebird作为第一个依赖项。然后在回调中,我执行一些功能检测,如果浏览器不支持Promise,则将其分配给window.Promise
下面是一个示例,它应该非常清晰地映射到您的设置。相关行用注释表示
const testModules=Object.keys(window.\uuu karma\uuuu.files)
.filter(文件名=>/\.spec\.js$/.test(文件名))
.map(filename=>filename.replace(/^\/base\/dist\/\.js$/g',);
testModules.unshift('bluebird');//使bluebird成为数组中的第一个依赖项。。。这意味着它将是回调函数的第一个参数(见下文)
让我们开始=错误;
require.config({
baseUrl:“/base/global/output”,
路径:{
“bluebird”:“../some/path/to/bluebird.min”//确保加载程序可以找到bluebird
},
deps:testModules,//bluebird是这个模块数组中的第一项
callback:(bluebird:any)=>{//bluebird是第一个arg…还有许多其他arg,但我们不关心其余的
如果(启动){
返回;
}
//polyfill承诺根据需要提供服务。
如果(!(“承诺”在窗口中&“解决”在窗口中。承诺&“拒绝”在窗口中。承诺&“所有”在窗口中。承诺&“竞争”在窗口中。承诺)){
window.Promise=bluebird.Promise;
}
因果关系=真;
窗口。uuu karma_uuuu.start();
}
});
谢谢,午饭后我会看一看的!这有一点帮助,但随后我遇到了一些未处理的拒绝错误:aurelia模板中的堆栈空间不足
错误。另外,使用waitForDocumentElement的测试仍然失败,但至少我不再有承诺被拒绝的错误。我开始使用waitForDocumentElement测试自定义元素的可绑定属性的更改。也需要获取polyfill吗?同样的技术包括堆栈跟踪等,如您所见,bluebird现在似乎已正确加载,只是缺少了另一件东西:)也许您适合获取,特别是如果模板使用它。