Ember.run.later在测试中的行为

时间:2015-01-09 21:25:28

标签: ember.js ember-cli

我基于这篇文章在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消息服务?)

谢谢!

0 个答案:

没有答案