我基于这篇文章在Ember-CLI应用程序中构建了一个简单的flash消息服务: https://medium.com/delightful-ui-for-ember-apps/adding-flash-messages-to-an-ember-app-437b13e49c1b
正如帖子中的代码所示,该服务依赖于Ember.run.later在指定的时间段后销毁消息。
我在应用程序的各个部分,路由和控制器级别使用此服务。
我想通过一些集成测试来测试这个功能。例如,在应用程序路由上,用户可以向后端提交搜索查询。如果查询没有正确形成,那么我使用flash消息服务抛出错误。同样,我可以检查身份验证是否成功:
`import Ember from 'ember'`
`import ApplicationRouteMixin from 'simple-auth/mixins/application-route-mixin'`
ApplicationRoute = Ember.Route.extend ApplicationRouteMixin,
setupController: (ctrl) ->
flashes = @get 'flashes'
ctrl.set 'flashes', flashes
actions:
error: (e) ->
if e.jqXHR and e.jqXHR.status is 404
@get('flashes').warning('no data from the server')
sessionAuthenticationFailed: (e) ->
@get('flashes').danger('another relevant error message')
`export default ApplicationRoute`
为了测试这个,我会模拟所需的行为,然后检查消息是否存在:
test 'checking if the error appears on a 404', ->
# series of steps that lead to a 404
andThen ->
equal(find('.ember-notify').text(), 'no data from the server')
其中' ember-notify'是包含闪烁消息的div的类名。
我看到测试容器中根据需要弹出消息 - 然后测试'暂停'直到消息消失。这意味着我的测试最终失败了,因为它在消失之后检查div 的存在。
我的理解是这个解释在这个帖子中: https://github.com/emberjs/ember.js/issues/5362
例如," Ember测试检查计划的计时器在完成拆除应用之前完成。"
所以我的测试环境总是等待Ember.run.later完成。
关于如何处理此问题的任何想法/想法?有没有更好的方法来测试路由级别的错误事件?
我的想法是,我可以直接测试是否在应用程序路由上调用了错误事件,但是我不知道如何执行此操作(以及如何将此模式扩展到测试控制器,我也在使用flash消息服务?)
谢谢!