ember qunit requirejs嵌套需要加载超时

时间:2014-07-26 12:46:09

标签: javascript ember.js requirejs qunit karma-runner

我正在测试使用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;
                });
            });
        });

1 个答案:

答案 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);

    });
}