rspecでコントローラのスタブ認証を試みています。 authorize
メソッドをスタブすると、私が提供する値が何であってもテストは常に成功しました。RSpecを使用したApplicationControllerメソッドのスタブ
コントローラー:
class FoosController < ApplicationController
before_filter :authorize
...
end
ApplicationControllerに:
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :current_user
protected
def authorize
return true if current_user
flash[:error] = 'Please login'
redirect_to signin_path
false
end
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end
仕様:
# this passes (expected)
it "..." do
controller.stubs(:current_user).returns(User.new)
get :index
response.should be_success
end
# this fails (expected)
it "..." do
controller.stubs(:current_user).returns(nil)
get :index
response.should be_success
end
# this passes (expected)
it "..." do
controller.stubs(:authorize).returns(true)
get :index
response.should be_success
end
# Problem: this passes (unexpected)
it "..." do
controller.stubs(:authorize).returns(false)
get :index
response.should be_success
end
それは、すぐに私はスタブとしてのように思える:関係なく、それを設定されているどのような値、許可しません必ずbefore_filterを渡します。私は保護された/ helper_methodの指定かもしれないと思ったが、それらと遊ぶことは何も変わらなかった。
なぜスタブしますか?before_filterを渡す理由はfalseですか?
OKです。私はちょうど許可し、ブラウザを読み込み、リダイレクトが呼び出されないので、私は200とページを取得するfalseを返す。ヘルプありがとう。 – blu