2015-10-12 48 views
1

所以我的驗收測試在我的承諾完成之前不斷破壞自己。我知道我需要將我的承諾包裝在Ember運行循環中,但我無法使其工作。這裏是我的組件的外觀:Ember/emberfire運行循環驗收測試

export default Ember.Component.extend({ 
    store: Ember.inject.service(), 

    didReceiveAttrs() { 
    this.handleSearchQueryChange(); 
    }, 

    /** 
    * Search based on the searchQuery 
    */ 
    handleSearchQueryChange() { 
    this.get('store').query('animals', { 
     orderBy: 'name', 
     startAt: this.attrs.searchQuery 
    }).then(searchResults => { 
     this.set('searchResults', searchResults); 
    }); 
    } 
}); 

我已經試過包裝this.handleSearchQueryChange(),在運行循環this.get('store').query...this.set('searchResults', searchResults)但儘管如此,在接受測試只是不等待store.query完成。

有一點需要注意,此商店查詢在實時Firebase後端上執行請求。

我目前正在使用僞裝模擬數據並解決此問題。但我想通過Ember.run解決它。任何人都在意提供解決方案?

回答

0

這聽起來像你的問題可能具有相同的事業爲errors I've been seeing

TL;博士

要解決這個問題,我一直在使用一個custom test waiter.您可以ember install ember-cli-test-model-waiter安裝它(爲灰燼v2.0 +),它應該讓你的測試工作沒有任何進一步的設置(如果沒有,請file a bug)。

較長的答案:

這個問題的根本原因是,餘燼測試系統不知道如何處理火力地堡的異步性。對於大多數適配器,這不是問題,因爲測試系統instruments AJAX callsensures they have completed before proceeding,但這不適用於Firebase的Web套接字通信。

custom test waiter I mentioned above的工作原理是在繼續測試之前等待所有模型解析,所以應該使用任何非AJAX適配器。

+0

謝謝,我害怕我會得到那麼長的答案。好吧。 就像我說的,我目前通過使用pretender來解決這個問題,但理想情況下我想在Firebase的運行測試數據庫上使用它,以便我也可以測試我的安全規則。當我能夠時,我會研究你的插件。謝謝! – rmmmp

+0

是的,我寫了一個服務員,正是因爲這個原因:想測試一個活的(測試實例)firebase。只是安裝它應該是所有需要使您的測試工作(如果沒有,請讓我知道)。我還沒有看到太多的另一個選項是[firebase-server](https://github.com/urish/firebase-server) - 它[由firebase作爲端對端測試的官方解決方案推廣](https://www.firebase.com/blog/2015-04-24-end-to-end-testing-firebase-server.html) –

+0

實際上,如果你需要測試通過firebase登錄過程。還有一個(相關的)錯誤阻止了這一點。我已經提交了[解決此問題的請求](https://github.com/firebase/emberfire/pull/330),但在此之前,您需要在登錄時進行一些手動簿記:https:// github.com/gabrielgrant/empty/commit/257776d32dc300f0c0dde8d2904274172e2067d5 –