【问题标题】:Ember UI not triggering Ember controller actions during testingEmber UI 在测试期间未触发 Ember 控制器操作
【发布时间】:2014-06-03 14:13:12
【问题描述】:

我有一个很有趣的问题。

我们让 Rails + Capybara 使用我们的 Ember 前端执行集成测试。

我遇到的问题是,在运行我们的 :Selenium 供电测试时,有时(这是至关重要的一点,有时是这样),一个 UI 元素将被按下并且 Ember 操作不会开火。

所以,这不是与 ajax 相关的问题。 我没有收到数据错误。 也不是 Ember 错误,也不是 js 错误,也不是 Capybara::ElementNotFound 错误。

相关 UI 已加载,Capybara 然后成功单击按钮,然后永远不会调用 Ember 操作。不是响应时间太长,就是没有触发。

我知道这一点是因为我正在记录 Ember 操作 (console.log()),并且可以看到它在工作时发生,而在不工作时不会发生。

所以,我的理论是……Ember 在设置所有 js 来处理操作之前已经加载了 UI。这可能吗?

【问题讨论】:

  • 您能分享(部分)您的测试代码吗?

标签: javascript ruby-on-rails ember.js selenium-webdriver capybara


【解决方案1】:

您是否尝试过在测试中显式触发run loop

【讨论】:

  • 嘿@dv87。我已经阅读了有关 runloop 的信息......但不确定我应该在哪里以及何时与它交互??
  • 没有看到你的代码很难判断,但通常将用户交互包装在运行循环中是明智的(因此触发路由更改的点击应该由Ember.run(function() { /* Your code */ });包装
  • 感谢@dv87,但我在水豚中运行它,没有显式执行 js 代码,水豚只是模拟用户交互。我都是用 ruby​​ 写的。
  • 好吧.. 我不熟悉那个工具包,但它可能仍然是一个 runloop 问题.. 要对此进行测试,您可以尝试在输入路由后暂停测试(这样 runloop 就有时间完全的)。更多关于discuss.emberjs.com/t/testing-ember-with-ember-rails/4162/8。祝你好运!
【解决方案2】:

想通了。

似乎 Ember 模板以及 UI 将在路由器中 setupController 属性中的所有方法完成之前加载。

我对 Ember 的了解还不够,无法理解它是如何以及为什么这样工作的,但我能够通过执行以下操作来解决此问题:

  1. setupController 中的所有回调结束时,我将控制器属性设置为true。 'controller.set('setupDone', true)'

  2. 在该路由的模板中,我将 UI 包装在有条件的 {{#if setupDone}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多