如何配置 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/