1

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

4

1 回答 1

1

您还没有描述没有睡眠的情况下什么不起作用,但我假设是期望失败了。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
于 2016-12-05T16:13:36.597 回答