我有一个非常有趣的问题。
我们让Rails + Capybara与我们的Ember前端进行集成测试。
我遇到的问题是,在运行我们的:Selenium
强力测试时, SOMETIMES (这是关键的一点,有时候),一个用户界面将按下元素并且不会触发Ember动作。
所以,这不是与ajax相关的问题。 我没有收到数据错误。 Nor 一个Ember错误,也不一个js错误,也一个Capybara::ElementNotFound
错误。
有问题的UI已加载,Capybara然后成功点击按钮,然后永远不会调用Ember操作。并不是说它需要花费太长时间来回应,而是根本不会触发它。
我知道这是因为我记录了Ember动作(console.log()
)并且可以看到它在它起作用时发生,并且在它没有发生时就不会发生。
所以,我的理论是...... Ember在设置所有j来处理动作之前加载了UI。这有可能吗?
答案 0 :(得分:1)
您是否尝试在测试中明确触发run loop?
答案 1 :(得分:0)
想出来。
似乎Ember模板以及UI将在路由器的setupController
属性中的所有方法完成之前加载。
我真的不太了解Ember,了解这是如何以及为什么会这样,但我能够通过以下方式解决这个问题:
在setupController
中的所有回调结束时,我将controller属性设置为true。 'controller.set('setupDone',true)'
在该路线的模板中,我将UI包装在条件{{#if setupDone}}