2016-05-19 7 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 .TO 'ダッシュボード' のチェックを(ページ)を期待するフォームが配置され、同じページ上のuser.name単語があります。ですから、click_buttonの意味は何ですか? click_buttonの後に読み込むべきページのコンテンツをチェックする方法ちなみに、そのようなテストの名前を正しく指定する方法は? 申し訳ありませんが、愚かな質問の場合、私はrspecで初心者です:c

ありがとう!

答えて

0

あなたは、ユーザーがログインした後にページに表示されるいくつかのコンテンツを選択する必要があります。あなたのアプリは、「あなたは今ログインしている」のようなものを言ってメッセージを表示しないので、あなたが行うことができれば

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

そうでない場合は、ヘッダーバーにユーザー名が表示されますか?そして、あなたが期待する

のようなもの(ページ).TO have_css(「ヘッダ」、テキスト:user.name)行うことができます

などを...鍵は、ニーズがオンに表示されるのをあなたが探しているものは何でもということです次のページはフォームのページには表示されません。どちらの場合でも、カピバラは、次のページの読み込み時間を与えるはずのテキストを検索しようとしている間に、Capybara.default_max_wait_time秒まで待ちます(ラックテスト以外のドライバを使用していると仮定して)。ラックテストドライバを使用していて、JSまたは非同期サポートがない場合は、click_buttonがフォームを送信し、次のページがロードされるまでexpectが実行されません。

名前を付けてテストすると、それはあなたに意味をなさせるものなので、今から1年後のことを知ることができます。

+0

メッセージにduscがあっても、私はexpect(page).to have_content( "あなたは今ログインしています")というテストをパスしません。しかし、sign_inフォームがあるコンテンツからsmthを調べるだけでテストは合格になります。それは必ずしもuser.nameに関するものではありません。サインイン後にページに 'Hello'がある場合、sign_inフォームがあるページにこの単語がない場合、expect(page)。have_content( "Hello")は渡されません。それは問題です、なぜ私はボタンが参照するページで動作しない場合、または私は間違っているsmthを行っています( – Jakov

+0

あなたが何か間違っている - 私はアプリが実際にはないボタンをクリックしたときにログインする、または次のページにあるテキストをチェックしていない - テストログに実際のリクエストが表示されるはずです。rspecとcapybaraを初めて使用しているので、 JSのサポートを持たないラックテストドライバ - JSが無効になっているかJSが動作する必要がある場合にあなたのアプリケーションは実際にログインしますか?もしそうなら、Capybarasのドライバを使用する必要があります –

関連する問題