Ember / emberfire运行循环验收测试

时间:2015-10-12 18:48:51

标签: ember.js emberfire

因此,在我的承诺完成之前,我的验收测试一直在摧毁自己。我知道我需要在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来解决它。有人关心提供解决方案吗?

1 个答案:

答案 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 callsensures they have completed before proceeding,但这不适用于Firebase的websockets通信。

custom test waiter I mentioned above的工作方式是在继续测试之前等待所有模型解决,因此应该可以使用任何非AJAX适配器。