我认为访问某个页面,填写表格并在此之后访问另一个页面时已经满足了比赛条件。这是完整规格。
describe "Dashboard", js: true do
it 'should be displayed for logged in writer' do
# sign_in
visit '/login'
within(".login-form") do
fill_in 'login', with: '[email protected]'
fill_in 'password', with: 'somepassword'
end
click_button 'LOGIN'
# test itself
visit '/dashboard'
expect(page).to have_content 'Welcome back!'
# sign_out
visit '/dashboard'
find('span', text: 'Logout').click
end
end
即使将
default_max_wait_time
设置为15
,该测试也会失败。但是,它可用于sleep 1
:# test itself
sleep 1
visit '/dashboard'
expect(page).to have_content 'Welcome back!'
有没有更好的方法来避免这种竞争状况?
最佳答案
单击“登录”按钮后,您需要等待更改以显示登录已完成。这是因为事情在支持JS的浏览器中异步发生,click_button
所做的只是单击按钮,它不等待单击按钮所做的任何效果。所以你想要像
click_button 'LOGIN'
expect(page).to have_text('You are logged in') # whatever text makes sense on your site
visit '/dashboard'
...
另外,您显示的测试已注销-但实际上并未确认用户已注销-因此这是测试的无用部分
关于javascript - capybara 的种族状况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33634141/