2014-03-03 32 views
3

下面的教程和其他線程我不能使測試在運行異步代碼時運行。以下是我一直試圖測試的內容:http://emberjs.jsbin.com/xacurasi/1/edit?html,js,output以及入門工具包中提供的測試。使用?test參數打開時應用程序窗口(編輯:顯示實際應用程序的框架,而不是qunit測試頁面)顯示空白頁面。Emberjs - 如何測試承諾和其他異步行爲?

這裏是我唯一的異步代碼:

App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
     var promise; 

     Ember.run(function() { 
      promise = Em.$.getJSON('http://123.345.456.78/ajax/server.php'); 
     }); 

     return promise; 
    } 
}); 

錯誤我收到的控制檯:

Uncaught Error: Assertion Failed: You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in an Ember.run

這是相當混亂,因爲我沒有在Ember.run(function() { //my code here});

纏上了我的異步代碼
+1

https://gist.github.com/anonymous/8a30621ca2a8e2d890d1 –

回答

4

編輯:

這個錯誤清除了事情。該錯誤並不意味着getJSON的調用應該在Ember.run中,這意味着getJSON調用的回調應該在Ember.run中。這是Ember運行循環如何工作的一個怪癖。該代碼在正常操作中正常工作,但不在測試模式下。有關於它的簡短討論here。你需要做的是給getJSON函數提供一個回調函數。像這樣的東西應該解決它(並明確你在做什麼)。

model: function() { 
    return new Ember.RSVP.Promise(function(resolve) { 
     Ember.$.getJSON('http://foobar', function(data) { 
      Ember.run(null, resolve, data); 
     }); 
    }); 
} 

或者你可以使用我鏈接到的線程底部的小型庫。但我想我會給你一個解決方案,只使用Ember.js以防萬一。

+0

Qunit正常顯示,但它就像測試凍結。空白頁面是qunit測試頁面中顯示實際應用程序的頁面。我的測試是入門套件中的默認設置,我沒有改變任何東西。通過'asyncTest'你的意思是把這個添加爲URL參數嗎?初學者應用程序和我的JSBin之間的唯一區別是模型鉤子。 – shturm

+0

控制檯中是否顯示任何錯誤? – GJK

+0

是的,我將其添加到編輯中。錯誤是'未捕獲的錯誤:斷言失敗:您已打開測試模式,禁用了運行循環的自動運行。您需要在Ember.run中包含任何帶有異步副作用的代碼 – shturm