Ember.js Acceptance Testing不等待异步数据操作

时间:2015-10-29 23:11:55

标签: ember.js ember-data emberfire

使用Emberfire(Firebase)适配器时,我收到各种错误,表明测试没有等待数据操作完成。

例如:Error: Assertion Failed: You can only unload a record which is not inFlight.当我尝试创建,检查,然后删除记录

此外:

FIREBASE WARNING: Exception was thrown by user callback. Error: Called stop() outside of a test context at Object.extend.stop (http://localhost:4200/assets/test-support.js:3000:10) at exports.default._emberTestingAdaptersAdapter.default.extend.asyncStart

手动浏览我的应用程序时,以及使用标准的ember数据适配器时,都不会发生这些错误。

导致这些错误的原因是什么?如何避免这些错误?

编辑:虽然症状有点不同(没有抛出错误),但听起来this problem可能与我所看到的错误具有相同的根本原因。

1 个答案:

答案 0 :(得分:3)

TL;博士

要解决此问题,我一直在使用custom test waiter.您可以使用ember install ember-cli-test-model-waiter进行安装(适用于Ember v2.0 +)

更长的答案:

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

因此,虽然手动交互时不会出现这些错误,但我相信如果可以快速点击这些错误,那么它们在技术上是可行的。

这些问题是known to occur with ember-pouch,也可能与其他非AJAX适配器(例如localstorage适配器(12)或任何其他基于websockets的适配器一起出现。可能会发生夹具适配器,但可能会立即返回结果,因此不会触发此问题)。它也发生在其他异步过程中,例如liquid-fire animationsfixed in a similar way

custom test waiter I mentioned in the tl;dr通过在继续测试之前等待所有模型解决,因此应该适用于所有这些非AJAX适配器。

有关ember的测试如何处理异步性的更多背景知识,Cory Forsyth has a helpful blog postthis gist提供了另一种更灵活的解决方案方法,但这需要更多的手动记账。