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 适配器。
因此,在我的承诺完成之前,我的验收测试一直在自我毁灭。我知道我需要将我的承诺包装在 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 适配器。