我试图找出如何正确编写Ember测试助手,该助手执行自己的异步操作和测试本身涉及异步操作,不一定包含在异步助手中。 Ember站点here和here上的示例都显示异步测试助手,这些助手仅通过调用预先存在的异步助手而不是创建自己的异步条件的代码构建。
背景:我正在开发一个服务,该服务将拥有一个由Ember + Ember Data提供的REST后端。我想写一些与实际服务器对话的测试代码,以便我们能够详细说明Ember-Data如何与服务器交互。 (在您上下关于集成测试应如何使用虚假数据以便它们可以在CI模式下运行之前,我们所做的是设置一个单独的 Ember应用程序,其唯一目的是生活就是通过Ember Data来运行数据模型,以便调试服务器。因此,这些都是服务器测试,旨在确保服务器和Ember之间的兼容性数据,而不是Ember应用程序本身的集成测试。)
因此,一些测试想要做的是:
前两个操作都显然是异步的。第一个很明显是一个很好的异步助手。第二个并不一定是帮助者,因为每次调用都会有所不同,但显然测试本身需要等待来自DS.store
的方法的承诺。
最后,我知道的其他事情:
click
,visit
)均以return app.testHelpers.wait();
wait
返回RSVP.Promise
的实例,该实例执行大量处理以确保在结算之前对事物进行了或多或少的清理,包括处理优秀的AJAX查询,测试服务员等wait
可以与测试服务员互动。因此,似乎如果我的异步助手与Ember' s(即return app.testHelpers.wait();
)做同样的事情,这对我的AJAX助手来说已经足够了,因为wait
会照顾到等待AJAX事务完成。然而,这并不是必要的回答更广泛的问题。
好的,现在真正的问题:
如果我想编写自己的任意异步助手,我是否足以返回将在适当时间解决的RSVP.Promise
实例?或者是否有必要实际使用wait()
机制(并可能测试服务员),因为wait
机制的行为有一些额外的Ember依赖性?
Ember是否对涉及中游异步操作的测试有任何特殊要求?或者QUnit mechanisms for async tests是否足够?
Ember是否有任何"包装"对于QUnit异步的东西? (它"隐藏"它的测试调用后面的QUnit-ness的方式。)
Ember与服务器的数据交互是否依赖于Ember运行循环?
好吧,我认为这对于一个问题来说已经足够了。 :)我非常感谢任何愿意教育我的人。
答案 0 :(得分:0)
尝试用我对这些可能不完整的问题的经验回答您的问题:
andThen
块将等待您的承诺在运行之前解析,就像访问内置的异步帮助程序一样。Ember.run
语句中包装操作对象或在其上设置属性的语句希望这有帮助