2015-09-20 77 views
0

我無法接受測試使用ic-ajax提交表單的Ember CLI組件。使用ic-ajax進行Ember CLI測試

問題是驗收測試中的andThen函數沒有等待表單提交來解決。

組件:

import Ember from 'ember'; 
import ajax from 'ic-ajax'; 

export default Ember.Component.extend({ 
    tagName: 'form', 

    // ...snip... 

    submit(e) { 
    e.preventDefault(); 

    const request = ajax({ 
     url: "url.com" 
    }); 
    // Debugging in test mode, Ember.Test.lastPromise === null here? 
    } 

    // ...snip... 

}); 

驗收測試:

test('it surfaces errors', function(assert) { 
    visit('/test'); 
    let component; 

    andThen(function() { 
    component = find('.my-form'); 

    fillIn('input[Placeholder="Email"]', '[email protected]'); 
    click('button[type="submit"]');  

    andThen(function() { 
     // PROBLEM: This code doesn't wait for the ic-ajax promise to resolve 
     assert.ok(component.hasClass('error'), "The component applied the error classname."); 
    }); 
    }); 
}); 

創建ic-ajax承諾似乎並沒有設置Ember.Test.lastPromise,這意味着andThen不等待提交表單返回。

我在這裏錯過了什麼嗎?

回答

0

我相信這是因爲您的組件中的提交操作對服務器執行異步請求。基本上它在另一個「線程」中運行,與主程序流程並行。所以andThen幫手對此一無所知。嘗試return請求對象承諾出sumbit動作,以便andThen幫手可以捕獲並處理它。

如果這不起作用,您也可以使這個ajax請求同步運行測試環境。