我在调查测试失败的原因时遇到了很大的困难。我是一位经验丰富的程序员,并且精通一般调试技术,但我对 Capybara 和 RSpec 很陌生,所以我希望有某种我不知道的工具可以帮助我。
简而言之,我有一个类似这样的测试:
expect { click('.fake_button'); sleep 1 }.to change { clicks.count }.by(1)
当点击假按钮时,它会触发对 Rails 应用程序的 AJAX 调用,该调用除其他外还会向数据库添加一条点击记录。我可以想到许多可能导致此测试失败的因素,并且从日志中获取信息的成功率有限。测试在开发中不会失败,只是在测试中偶尔失败。测试环境的差异之一是测试是在我们办公室的服务器上运行,而不是在云中的服务器上运行,因此存在网络延迟以及其他可能的问题。
这很难诊断,因为从失败的测试中得到的信息非常少,当然,当我读到失败的信息时,所有数据库信息都被丢弃了。我知道 clicks.count
在测试中没有改变,我可以推断 click('.fake_button')
成功了,但由于服务器时间同步问题,我可以'甚至不能确定单击是否发生在右侧按钮上或是否触发了 AJAX 调用。
我想要一些工具来帮助我在 Web 服务器日志中跟踪此测试用例(例如,可能使用自动 URL 参数)、有关 Capybara 所做操作的详细日志记录以及网页的记录发生故障的时间,包括 cookie 值。我可以得到其中任何一个吗?有这样的事吗?
最佳答案
capybara 模拟人类行为。测试代码完全满足了需要。这是真正的用户应该期待的事情。我认为你不应该提示代码。
由于网络延迟,我认为增加等待时间(例如 1 到 2)是可以的,但它不应超过合理的值,否则应用程序将无法按真实用户的预期运行。
调试 capybara 代码,我总结了三种方法:
将“save_and_open_page”添加到您想要查看结果的位置。然后测试时会出现一个保存的html页面。 (我忘记是否应该添加“launchy”gem)
暂时将这个测试设置为JS,看看这个测试进行得怎么样。
scenario "a fake test", js: true do # code here end
通过执行此操作,将弹出一个真正的浏览器,Capybara 将逐步向您展示它如何播放代码。
只需运行
$ tail log/test.log
即可显示最近发生的情况。
关于ruby-on-rails-3 - Capybara/RSpec 更好的日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15652754/