2014-07-26 59 views
0

我正在用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; 
       }); 
      }); 
     }); 
+0

你在瀏覽器中測試,還是在phantomjs等測試?你確定在你的測試套件中定義了「require」嗎? – Kingpin2k

+0

我使用phantomjs和chrome,require被定義,我可以使用常規'define'加載模塊,實際上如果我使用'define(['routes/index_deps'])'而不是嵌套require,它就可以工作。 – eguneys

+0

好,受過教育的猜測是錯誤的。根據你的陳述,它看起來像一個需求和測試框架的問題,並沒有太多的餘燼本身,因爲你要控制要求...我們必須建立一個jsbin,看看我們是否可以重現。 – Kingpin2k

回答

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

    }); 
} 
+0

這並沒有幫助,我也不想改變我的應用程序代碼,爲了測試,因爲它工作正常,如果我手動打開瀏覽器。還有一個提示是,如果我將'routes/index_deps'改爲不像'routes/aslkdfjals'那樣的東西,它會給出不同的錯誤,所以需要知道'routes/index_deps'存在,但我不知道原因負載超時錯誤。 – eguneys

+0

另請參閱我的編輯請。 – eguneys