我正在用qunit和karma測試運行器測試emberjs。我也使用 requirejs進行模塊加載。ember qunit requirejs nested require load timeout
索引路由beforeModel
掛鉤返回承諾,呼叫需要 延遲加載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;
});
});
});
你在瀏覽器中測試,還是在phantomjs等測試?你確定在你的測試套件中定義了「require」嗎? – Kingpin2k
我使用phantomjs和chrome,require被定義,我可以使用常規'define'加載模塊,實際上如果我使用'define(['routes/index_deps'])'而不是嵌套require,它就可以工作。 – eguneys
好,受過教育的猜測是錯誤的。根據你的陳述,它看起來像一個需求和測試框架的問題,並沒有太多的餘燼本身,因爲你要控制要求...我們必須建立一個jsbin,看看我們是否可以重現。 – Kingpin2k