我正在测试使用qunit和karma测试跑步者的emberjs。我也用 requirejs用于模块加载。
索引路由beforeModel
挂钩返回调用require的promise
延迟加载routes/index_deps
。
File: app/index_route.js
beforeModel: function() {
return new Ember.RSVP.Promise(function(resolve, reject) {
require(['routes/index_deps'], function() {
resolve();
});
// Ember.run.later(function() {
// resolve();
// }, 5000);
});
}
我对索引路线的测试看起来像这样。
File: test/first-test.js
test('hello', function() {
expect(1);
visit('/').then(function() {
equal(find('h1').text(), 'Setting Up');
});
});
此设置会出现此错误:
Uncaught Error: Load timeout for modules: routes/index_deps
如果我发表评论require
部分并取消注释Ember.run.later
部分,它完美无缺。
app/index_route.js
也没有任何问题,因为它
在浏览器上按预期工作。仅在测试时才会发生此错误。
修改
require
回调永远不会触发,resolve
永远不会被调用。因此,如果我将整个Ember.run
换行,那么将它包装在require
中就不会有任何区别,但这并没有任何区别。
here
以下的日志,但not here
没有记录。
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.run(function() {
console.log('here');
require(['routes/index_deps'], function() {
console.log('not here');
resolve;
});
});
});
答案 0 :(得分:0)
我有一个有根据的猜测。我本来期望一个不同的错误,但也许承诺/过渡掩盖了它。
回调可能不会在运行循环中运行,因此在运行循环运行时不会解析承诺。当Ember处于测试模式时,必须手动旋转运行循环。您应该能够在运行调用中包装解析并测试此理论。
beforeModel: function() {
var toRequire = this.get('requireLists');
return new Ember.RSVP.Promise(function(resolve, reject) {
require(['routes/index_deps'], function() {
Em.run(resolve);
});
// Ember.run.later(function() {
// resolve();
// }, 5000);
});
}