1

所以我的验收测试在我的承诺完成之前不断地自我毁灭。我知道我需要将我的承诺包装在 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);
    });
  }
});

我已经尝试过 wrapping this.handleSearchQueryChange()this.get('store').query...并且this.set('searchResults', searchResults)在运行循环中,但验收测试仍然不等待 store.query 完成。

需要注意的一点是,此商店查询在实时 Firebase 后端执行请求。

我目前正在使用 Pretender 来模拟数据并解决这个问题。但我也想通过 Ember.run 解决它。有人愿意提供解决方案吗?

4

1 回答 1

0

听起来您的问题可能与我看到的错误的原因相同

tl;博士

为了解决这个问题,我一直在使用自定义测试服务员。您可以使用ember install ember-cli-test-model-waiter(对于 Ember v2.0+)安装它,它应该可以让您的测试工作而无需任何进一步的设置(如果没有,请提交错误)。

更长的答案:

这个问题的根本原因是 ember 测试系统不知道如何处理 Firebase 的异步性。对于大多数适配器,这不是问题,因为测试系统会检测 AJAX 调用确保它们在继续之前完成,但这不适用于 Firebase 的 websockets 通信。

我上面提到的自定义测试服务员在继续测试之前等待所有模型解决,因此应该与任何非 AJAX 适配器一起使用。

于 2015-10-29T23:21:11.247 回答