Ember/emberfire 运行循环验收测试

Ember/emberfire run loop acceptance test

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

听起来您的问题可能与

的原因相同

tl;博士

为了解决这个问题,我一直在使用 custom test waiter. You can install it with ember install ember-cli-test-model-waiter (for Ember v2.0+) and it should just make your test work without any further setup (if not, please file a bug)。

更长的答案:

这个问题的根本原因是ember测试系统不知道如何处理Firebase的异步性。对于大多数适配器,这不是问题,因为测试系统 instruments AJAX calls and ensures they have completed before proceeding,但这不适用于 Firebase 的 websockets 通信。

custom test waiter I mentioned above 的工作原理是在继续测试之前等待所有模型解析,因此应该适用于任何非 AJAX 适配器。