ruby-on-rails - Turbolinks 5 使用 capybara 进行功能测试

标签 ruby-on-rails capybara turbolinks poltergeist turbolinks-5

如何配置 capybara 与 Turbolinks 5 一起使用? 我已经在测试中配置了poltergeist和js: true

RSpec.feature "Home", type: :feature, js: true do
  describe "on home" do
    given!(:user) { create :user }

    background{ visit root_path }

    scenario "can select user" do
      first('.header h2', user.first_name).click
      sleep 1
      expect(page).to have_content user.email
    end
  end
end

我能够让它工作的唯一原因是使用sleep 1

最佳答案

你还没有描述在没有 sleep 的情况下什么不起作用,但我假设期望失败了。 Turbolinks 不需要任何特定配置,除了确保您使用的是支持 JS 的驱动程序(您似乎已经完成了)。

您所看到的行为的最常见原因是您将 Capybara.default_max_wait_time 设置得太低,因此 have_content 匹配器重试的时间不够长。尝试将其增加 1 秒(如果您未将其设置为其他值,则默认为 2 秒)。

第二种可能性是您没有禁用事务测试,而是尝试在多个线程之间共享数据库连接并陷入死锁。

此外,如果您实际上不需要使用 first,您应该更喜欢 find - #first#all 有许多限制(默认情况下不等待,并且返回的元素不可重新加载),这可能会导致测试中的不稳定,这使得它们的使用不受欢迎,除非绝对需要并且您完全了解页面上发生的情况。将查找范围限制在页面中只有一个结果的部分几乎总是比使用 first 效果更好。最重要的是,您对 first 的使用实际上并未使用传递给它的第二个参数,因为它需要作为 :text 选项传递

find('.header h2', text: user.first_name).click   #first takes the same parameters if you REALLY need first

关于ruby-on-rails - Turbolinks 5 使用 capybara 进行功能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40977734/

相关文章:

ruby-on-rails - Rails Bundler-在Gemfile中指定with-opt-dir?

ruby-on-rails - 活跃商家 - 未初始化常量 ActiveSupport::XmlMini_REXML::StringIO

ruby-on-rails - Rails + Sinatra 应用分享会

ruby-on-rails - 运行Capybara时如何配置puma?

ruby-on-rails - 简单形式关联的 Rspec 测试

ruby-on-rails - 在Rails 4.0.4应用中找不到文件 'turbolinks'

ruby-on-rails - 为什么我的 Rails 测试看不到内存中 SQLite3 数据库的内容?

ruby-on-rails - 如何在 rspec 中使用 capybara 点击下拉选项

从缓存加载网页时 JavaScript 不执行

ruby-on-rails - 我可以在Rails中使用Turbolink手动导航吗?