ruby-on-rails-3 - Capybara/RSpec 更好的日志记录?

标签 ruby-on-rails-3 rspec capybara

我在调查测试失败的原因时遇到了很大的困难。我是一位经验丰富的程序员,并且精通一般调试技术,但我对 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 代码,我总结了三种方法:

  1. 将“save_and_open_page”添加到您想要查看结果的位置。然后测试时会出现一个保存的html页面。 (我忘记是否应该添加“launchy”gem)

  2. 暂时将这个测试设置为JS,看看这个测试进行得怎么样。

    scenario "a fake test", js: true do
      # code here
    end
    

    通过执行此操作,将弹出一个真正的浏览器,Capybara 将逐步向您展示它如何播放代码。

  3. 只需运行 $ tail log/test.log 即可显示最近发生的情况。

关于ruby-on-rails-3 - Capybara/RSpec 更好的日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15652754/

相关文章:

ruby-on-rails - 如何在 Ruby on Rails 中计算表单文本字段的默认值?

ruby-on-rails - 单表继承 (STI) 和 has_and_belongs_to_many (HABTM) 关联的错误

javascript - 使用 RSpec 和 JS 选择元素

ruby-on-rails-3 - 如何允许异常在 rspec 请求规范中冒泡

ruby-on-rails - Rails 3:处理 ActiveRecord::RecordNotUnique 异常

ruby-on-rails - 铁路交易

ruby-on-rails - Rails "POST"成员路由响应所有请求类型

ruby-on-rails - 填充隐藏字段时出现 capybara 错误

testing - 如何使用 RSpec 检查页面中有多少个特定的 HTML 元素?

ruby-on-rails - 使用 Rspec 和 Capybara 在 Rails 3 中测试 session