Ruby on rails Turbolinks 5使用水豚进行特性测试
您如何配置水豚以使用Turbolinks 5? 我已经在测试中配置了poltergeist和Ruby on rails Turbolinks 5使用水豚进行特性测试,ruby-on-rails,capybara,turbolinks,poltergeist,turbolinks-5,Ruby On Rails,Capybara,Turbolinks,Poltergeist,Turbolinks 5,您如何配置水豚以使用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('.hea
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
我之所以能够让它起作用,唯一的原因是使用了睡眠1,你没有描述没有睡眠什么是不起作用的,但我假设是期望失败了。TurboLink不需要特定的配置,只需要确保您使用的是支持JS的驱动程序(您似乎已经这样做了) 您看到这种行为的最常见原因是您的
Capybara.default\u max\u wait\u time
设置太低,因此have\u content matcher没有足够长的时间重试。尝试将其增加1秒(如果未将其设置为任何其他值,则默认为2秒)
第二种可能性是您没有禁用事务测试,而是尝试在多个线程之间共享数据库连接,并且处于死锁状态
此外,如果您实际上不需要使用first
,您应该更喜欢find
-#first
和#所有
都有一些限制(默认情况下不等待,返回的元素不可重新加载),这些限制可能导致测试中出现片状,这使得他们的使用不受欢迎,除非在绝对需要的地方,并且你完全理解页面上发生了什么。如果将查找范围限定到页面中只有一个结果的部分,而不是首先使用
,您几乎总是会做得更好。除此之外,您对first
的使用实际上并没有使用传递给它的第二个参数,因为它需要作为:text
选项传递
find('.header h2', text: user.first_name).click #first takes the same parameters if you REALLY need first
如果我使用
单击user.first\u name
,则此操作不需要睡眠
。我知道,但是如果我使用查找(…)。单击@Spike886“不起作用”是什么意思?它什么都不起作用?这会引起错误吗?(如果是,什么错误)
单击与单击链接或按钮相同,这可能是因为单击的是实际的链接或按钮,而您最初的示例只是单击h2
我并不等待页面加载,所以,在turbolinks将其放置到链接页面之前,它会在当前页面上运行期望值one@Spike886Capybara不保证在任何操作上等待页面加载,这就是为什么匹配器(如have_content)将等待/重试到Capybara.default_max_wait_time seconds。如果您将该值增加到10秒左右,但期望值仍然失败(我假设这是您得到的错误,因为您还没有实际说过),那么可能是因为它没有实际单击触发重新加载的内容,或者是因为您正在共享一个DB连接而出现死锁(您也没有对此做出响应)-或者您使用的是poltergeist不支持的ES6/7功能