如何正确点击按钮后查看页面内容?

How to check page content after button click correctly?

我想检查单击 'sign in' 按钮后是否加载了正确的页面。

users_spec.rb

before :each do
  user = User.create(:email => 'admin@cm.com', :password => '123')
end

it "signs me in" do
  visit '/users/sign_in'
  within("#new_user") do
    fill_in 'Email', :with => 'admin@cm.com'
    fill_in 'Password', :with => '123'
    click_button 'Sign in'
  end
  expect(page).to have_content '#{user.name}' 
end

expect(page).to have_content 'Dashboard' 检查表单所在的同一页上是否有 user.name 单词。那么,click_button 有什么意义呢?如何让它检查应该在 click_button 之后加载的页面内容?顺便说一句,如何正确命名此类测试? 抱歉,如果这是一个愚蠢的问题,我是 rspec 的新手 :c

谢谢!

你必须选择一些用户登录后出现在页面上的内容。你的应用程序是否显示一条消息,说类似 "You are now logged in" 的内容,如果是,你可以这样做

expect(page).to have_content("You are now logged in")

如果没有,它会在 header 栏中显示用户名吗?然后你可以做一些像

预期(页面).to have_css("header",文本:user.name)

等...关键是无论您要搜索什么,都需要出现在下一页上,而不是出现在带有表单的页面上。在这两种情况下,Capybara 将等待 Capybara.default_max_wait_time 秒,同时重新尝试查找文本(假设您使用的是 driver 而不是 rack-test),这应该给下一页时间加载。如果您使用的是 rack-test driver,则没有 JS 或异步支持,click_button 应该已经提交了一个表单,并且 expect 将在下一页加载之前不会执行。

至于测试命名 -- 给它起一个对你有意义的名字,这样你就知道一年后它会做什么。