2017-05-31 4 views
1

私はそのMinitest IntegrationTestと、ArgumentError:不明キーワード:セッション

test "should get index" do 
    get admin_product_url, params: {}, session: { user_id: @admin_user.id } 
    assert_response :success 
end 

ようminitestを使用して統合テストを実施するが、私はこのエラーメッセージ私は、セッション情報を設定することができますどのように他

ArgumentError: unknown keyword: session 

を取得しますか?

私はルビー2.4を使用し、これは動作するはず5.0.2

答えて

0

レールています:Railsの5では

test "should get index" do 
    session[:user_id] = @admin_user.id 
    get admin_product_url, params: {} 
    assert_response :success 
end 
+0

これは動作していません。 NoMethodError:nil:NilClass –

1

は、コントローラのテストでセッションにアクセスすることはできなくなりました。 Integration tests doesn't allow you to set session.

Ref

+0

のための未定義のメソッド 'session 'ですので、セッション変数を設定する方法はもうありませんか? –

+0

@StefanSchauer私は何も知らない。 –

1

統合テストは、あなたが作る要求は唯一そのような観点等からパスパラメータ、ヘッダを使用することができますので、それはsessionアクセサあなただけ一度使用可能になったことを理にかなって、ブラウジングセッションを近似します最初のリクエストがあり、このようなセッション変数のハッシュを渡すことはできません。理想的には、単一の要求だけでなく、より複雑なやりとりをテストする必要があります。コントローラロジックが設定しているセッション値についてアサーションを作成する必要があります。しかし、上記のようにテストを構成することができます:

test "should get index" do 
    get admin_product_url     # first request initializes session 
    session[:user_id] = @admin_user.id  # can now update session state 
    get admin_product_url     # subsequent request 
    assert_response :success    # assertions follow 
end 
+0

この解決法は私のためには機能しません。私は "NoMethodError:未定義のメソッド' session 'をnil:NilClass "errrorにしませんが、セッション情報は無視されます –

+0

はい、@Зелёныйのように思えます。統合テストにさらされたセッションハッシュは不変であるように見えます。セッション状態を設定する場合は、必要な予備リクエストをテストにコーディングする必要があります。 –

関連する問題