私は、SessionsController
にPOSTリクエストをして誰かが自分のサイトにログインできることをテストしようとしています。私はいくつかの場所でこの方法をお勧めしました:ユーザーがDeviseでサインインしているかどうかをテストします。
it 'must be able to sign in a user' do
user = create(:user)
post :create, format: :js, user: {email: user.email, password: user.password, remember_me: 0}
assert_response :success
@controller.current_user.must_equal user
end
しかし、このテストは正しくありません。 @controller.current_user
を呼び出すと、投稿されたパラメータを使用してユーザーを認証しようとし、指定された電子メール/パスワードが正しい場合はuser
を返します。 create
アクションが実際にsign_in
またはcurrent_user
を呼び出すという保証はありません。
これらのメソッドが呼び出されていることを確認するためにテストを書き直しても、他のメソッドを呼び出すことができます。 sign_out
。
最終的にユーザーがログインしているかどうかを確認する方法がありますか?そうであれば、そのユーザーは誰ですか。
EDIT -
SessionsController#はアクションを作成する場合、例えば、次のテストが
it 'must sign in a user' do
@controller.current_user.must_equal nil
post :create, format: :js, user: {email: @user.email, password: @user.password, remember_me: 0}
assert_response :success
@controller.current_user.must_equal @user
end
を通過するのである。で提案されているコードに最小限の変更を有する
def create
respond_to do |format|
format.js {
render nothing: true, status: 200
}
end
end
助けてもらえますか? http://stackoverflow.com/questions/23793597/how-to-access-devise-current-user-in-a-rspec-feature-test – tmn4jq
私はそれが助けてくれるとは思わないのでしょうか? current_userを呼び出すのに問題はありません。 – user1063998
は '.current_user'でユーザをログインしようとするメソッドか、インスタンス変数のattr_readerですか?前者なら、あなたが描いているように見えるのは、期待される行動です。 –