2012-01-13 10 views
1

私はRspec内でCapybaraを使ってレールアプリケーションの統合テストを書いています。フォームに記入したら、ユーザはsubmitを押します。私がテストを実行する場合CapybaraとRails、なぜhave have_contentを使って仕様になっているのですか?私はあなたにリダイレクトされていますか?

私が取得:そこに期待

がで「コースビルダーへようこそ」コンテンツであることを、「あなたは リダイレクトされます。」私は結果ページのコンテンツをテストしようとしています

は、ここではテストです:中

describe PagesController do 

    describe "Quiz testing in chapter" do 

    def page_view 
     Capybara::Node::Simple.new(@response.body) 
    end 

    render_views 
    login_student 

    it "should fail if user chosen wrong answer" do 
     page= create_quiz_page_with_two_choices_first_correct 
     post :answer_quiz, :page_id=>page.id, :submitted_single_answer=>'2' 
     page_view.should have_content("Welcome to course builder") 

    end 
    end 
end 

PagesController

def answer_quiz 
... 
respond_to do |format| 
    format.html { redirect_to page } 
    format.json { head :ok } 
end 
end 

私はちょうどカピバラを使い始めたので、私は何かを明らかに不足していますここに?なぜ私はリダイレクト応答にこだわりましたか?

ありがとうございます!

before(:each) do 
    login_student 
end 

しかしでも、おそらく問題を解決しないこと:

hopewise

+0

私はこのような簡単なチュートリアルを読むべきだと思います:http://codingfrontier.com/integration-testing-setup-with-rspec-and-capy first。 – socjopata

答えて

3

login_studentbeforeブロックに行く必要があります。カピバラを使用している場合、実際にそう、各例のログインページにアクセスし、ログインすることをお勧めします。

before(:each) do 
    visit login_path # log in test user 
end 

it "should do something awesome" do 
    visit "/awesome" 
    page.should have_content("You rock!") 
end 

あなたが作成することを避けることができますので、それは、テスト環境でログインを処理するための特殊なケースを記述することも役に立ちますテストログイン用のユーザー。

+0

ありがとう、私はあなたのアドバイスを適用しようとしましたが、Capybaraがlogin_pathを訪れてそこにこだわっているようですが、例えばsigninキーを押して入力しないと、上記の例のように "/ awesome"それは実際にログインさせる? – simo

+1

カピバラでは、どのような措置を講じるか教えてください。たとえば、 'visit login_path'、' fill_in:password、:with => "value" '、' click_button "ログイン"などです。詳細は特定のページによって異なります。私は詳細についてはCapybaraのドキュメントを読むことをお勧めします:http://github.com/jnicklas/capybara – zetetic

関連する問題