RSpecとCabybaraのクールさを知り、実際にテストを作成する方法を学んでいます。
リンクをクリックした後、特定のページへのリダイレクトがあるかどうかを確認しようとしています。以下はシナリオです
1)/projects/list というページがあります-htmlに「戻る」というアンカーがあり、/ projects/show [にリンクしています。 ____。]以下は、rspec describe "Sample" do describe "GET/projects/list" do it "sample test"で記述したテストです。 do 訪問 "/projects/list" click_link"戻る " assert_redirected_to"/projects/show " end end 終わり
テストは次のような失敗メッセージで失敗します
失敗/エラー:assert_redirected_to "/projects/show" ArgumentError: @requestはActionDispatch :: Request でなければなりません
リダイレクトをテストする方法と、私が間違っていることを教えてください。
current_path.should == "/projects/show"
を試してください
Capybaraは完全修飾URL用のcurrent_url
メソッドも実装しています。
docs の詳細情報。
これがあなたが必要とするものであるかどうかはわかりませんが、私のテストではそのようなアプローチを好みます:
...
subject { page }
...
before do
visit some_path_path
# do anything else you need to be redirected
end
it "should redirect to some other page" do
expect(page.current_path).to eq some_other_page_path
end
Devise wiki から:
Railsラックアプリケーションがリダイレクトするとき(Warden/Deviseがログインページにリダイレクトするように)、応答は統合セッションによって適切に更新されません。その結果、ヘルパーassert_redirected_toは作業。
また、このページには同じ情報があります。 Rspecが正しいパスになったことを確認してください
したがって、リダイレクトされていることをテストするのではなく、そのURLにいることをテストする必要があります。