使用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可能与我所看到的错误具有相同的根本原因。
答案 0 :(得分:3)
TL;博士
要解决此问题,我一直在使用custom test waiter.您可以使用ember install ember-cli-test-model-waiter
进行安装(适用于Ember v2.0 +)
更长的答案:
这些问题的根本原因是,余烬测试系统并不知道如何处理Firebase的异步性。对于大多数适配器,这不是问题,因为测试系统instruments AJAX calls和ensures they have completed before proceeding,但这不适用于Firebase的websockets通信。
因此,虽然手动交互时不会出现这些错误,但我相信如果可以快速点击这些错误,那么它们在技术上是可行的。
这些问题是known to occur with ember-pouch,也可能与其他非AJAX适配器(例如localstorage适配器(1,2)或任何其他基于websockets的适配器一起出现。可能会发生夹具适配器,但可能会立即返回结果,因此不会触发此问题)。它也发生在其他异步过程中,例如liquid-fire animations(fixed in a similar way)
custom test waiter I mentioned in the tl;dr通过在继续测试之前等待所有模型解决,因此应该适用于所有这些非AJAX适配器。
有关ember的测试如何处理异步性的更多背景知识,Cory Forsyth has a helpful blog post和this gist提供了另一种更灵活的解决方案方法,但这需要更多的手动记账。