因此,在我的承诺完成之前,我的验收测试一直在摧毁自己。我知道我需要在Ember运行循环中包含我的承诺,但我无法让它工作。以下是我的组件的外观:
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后端上执行请求。
我目前正在使用Pretender来模拟数据并解决此问题。但我也想通过Ember.run来解决它。有人关心提供解决方案吗?
答案 0 :(得分:0)
听起来您的问题可能与errors I've been seeing
的原因相同TL;博士
要解决此问题,我一直在使用custom test waiter.您可以使用ember install ember-cli-test-model-waiter
(对于Ember v2.0 +)安装它,它应该让您的测试无需任何操作进一步设置(如果没有,请file a bug)。
更长的答案:
这个问题的根本原因是,余烬测试系统并不知道如何处理Firebase的异步性。对于大多数适配器,这不是问题,因为测试系统instruments AJAX calls和ensures they have completed before proceeding,但这不适用于Firebase的websockets通信。
custom test waiter I mentioned above的工作方式是在继续测试之前等待所有模型解决,因此应该可以使用任何非AJAX适配器。