簡體   English   中英

如何使用異步路由進行Ember單元測試?

[英]How to do Ember unit testing with asynchronous routes?

我正在使用Ember.js異步路由指南中描述的功能。 也就是說,我從異步路由的model鈎子返回一個promise,以延遲轉換到路由,這可以按預期工作。

但是,它打破了我的應用程序單元測試的能力。 當我運行我的測試時,我在控制台中收到以下錯誤:

斷言失敗:您已打開測試模式,該模式禁用了運行循環的自動運行。 您需要在Ember.run中包含任何帶有異步副作用的代碼

我在Ember.run包裝了所有帶異步副作用的Ember.run ,但我仍然得到錯誤。

這是一個帶有最小例子的JSFiddle: http//jsfiddle.net/nRHfv/3/

該示例基於Ember入門套件及其附帶的測試運行器。 它有一個工作的異步索引路由。 如果在_config對象(第10行)中將testing: false設置為true ,它將打開測試套件,您應該在控制台中看到上述錯誤。

我的異步路由的model鈎子在第38行。我已經嘗試了在Ember.run包裝代碼的幾種變體。 例如,我已經嘗試在Ember.run之外定義promise,執行所有異步內容,然后在外面返回promise。 我也嘗試在Ember.run包裝then()的內容,就像我在其他一些答案上看到的那樣(例如, ember集成測試錯誤。處理異步副作用 )。

我究竟做錯了什么?

更多的搜索后,我發現這個顯着的評論指南:在測試異步副作用由Ember.js論壇EmberSherpa

BTW,今天發布了一個庫,旨在取代$ .getJSON並使這個過程變得更加容易https://github.com/instructure/ic-ajax

我嘗試了ic-ajax庫,它有效! 在深入了解它正在做什么之后,我應該如何編寫異步路由的model鈎子:

var promise = new Ember.RSVP.Promise(function (resolve, reject) {
  Ember.$.ajax({
    url: '/echo/json/',
    type: 'POST',
    data: {
      json: '{ "text": "Hello from Ember.js" }',
      delay: 0.25
    },
    dataType: 'json',
    success: function (response, textStatus, jqXHR) {
      Ember.run(null, resolve, response);
    }
  })
});

return promise.then(function (response) {
  return response;
});

我猜jQuery promises在測試時不能與Ember.RSVP.Promise互換(但它們用於觸發異步路由操作)。

這是一個更新的JSFiddle,具有異步路由和測試工作: http//jsfiddle.net/nRHfv/5/

我想我會堅持使用ic-ajax為了更清晰的代碼,並且因為在測試時能夠加載靜態燈具而不是實時API端點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM