web-dev-qa-db-ja.com

RSpecとCapybaraによるリダイレクトのテスト(Rails)

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 
でなければなりません

リダイレクトをテストする方法と、私が間違っていることを教えてください。

32
balanv

current_path.should == "/projects/show"を試してください

Capybaraは完全修飾URL用のcurrent_urlメソッドも実装しています。

docs の詳細情報。

69
zetetic

これがあなたが必要とするものであるかどうかはわかりませんが、私のテストではそのようなアプローチを好みます:

...
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
11
kovpack

Devise wiki から:

Railsラックアプリケーションがリダイレクトするとき(Warden/Deviseがログインページにリダイレクトするように)、応答は統合セッションによって適切に更新されません。その結果、ヘルパーassert_redirected_toは作業。

また、このページには同じ情報があります。 Rspecが正しいパスになったことを確認してください

したがって、リダイレクトされていることをテストするのではなく、そのURLにいることをテストする必要があります。

5
Jesse Wolgamott