2016-05-19 49 views
0

我想检查点击“登录”按钮后是否加载了正确的页面。如何检查按钮正确点击后的页面内容?

users_spec.rb

before :each do 
    user = User.create(:email => '[email protected]', :password => '123') 
end 

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

指望(页)。为了have_content '主页' 检查是否有相同的页面,在那里的形式位于user.name字。那么,click_button有什么意义呢?如何使它检查页面上的内容,应该在click_button之后加载?顺便说一下,如何正确命名这些测试? 对不起,如果这是一个愚蠢的问题,我是rspec的新手:c

谢谢!

回答

0

你必须选择,在用户登录后,页面上会出现一些内容。请问您的应用程序显示一个消息,说什么“你现在已登录”,如果是这样,你可以做

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

如果没有,它是否显示标题栏中的用户名?然后,你可以这样做

预期(页)。为了have_css(“头”,文:user.name)

等等......最关键的是,无论你正在寻找需要出现在下一页,但不在页面上。在这两种情况下,Capybara将等待最多Capybara.default_max_wait_time秒,同时重试查找文本(假设您使用的是机架测试以外的驱动程序),这会给下一页加载时间。如果您使用机架测试驱动程序,那么没有JS或异步支持,那么click_button应该已经提交了一个表单,并且期望不会在下一页加载之前执行。

至于测试命名 - 将它命名为对您有意义的事情,以便您了解一年后的工作情况。

+0

如果我写expect(页面).to has_content(“您现在已登录”),即使有dusc消息,测试也不会通过。但是,只有当我检查sign_in表单所在内容的smth时,测试才会通过。这不一定是关于user.name。如果登录后在页面上显示“Hello”,则在sign_in表单所在的页面上没有该单词的情况下,expect(page).to has_content(“Hello”)不会通过。这就是问题所在,我不明白为什么要使用button_click,如果测试不能在页面上工作,这个按钮是指或者我做的是错误的( – Jakov

+0

)你正在做的事情是错的 - 要么这个应用程序不是真的单击按钮时登录,或者您没有检查下一页上存在的文本 - 您的测试日志应该会显示实际请求。由于您是rspec和capybara的新手,我假设您使用机架测试驱动程序,它没有JS的支持 - 你的应用程序实际登录如果JS被禁用或需要JS的工作 - 如果是这样你需要使用其中一个Capybaras其他驱动程序 –

相关问题