Rails 3.2 rspec の before フィルターをバイパスするためにcontroller.should_receive(:before_filter_name)
inを使用します。rspec
しかし、いくつかのbefore filter
場合、rspec はエラーを返します。
フィルタ前の定義は次のcheck_availability
とおりです。
def check_availability
if find_config_const('sales_lead', 'customerx').nil? or find_config_const('sales_lead', 'customerx') == 'false'
redirect_to authentify.signin_path, :notice => "Quit!"
end
end
コントローラーでは、前のフィルター:
before_filter :require_employee
before_filter :load_customer
before_filter :check_availability
をバイパスするcheck_availability
ために、コントローラーの rspec に次のコードを追加します。
before(:each) do
controller.should_receive(:require_signin)
controller.should_receive(:check_availability)
end
フィルターrequire_signin
は問題ありません。ただし、2 番目のフィルターにはエラーがあります。
2) Customerx::SalesLeadsController GET 'new' should redirect user without proper right
←[31mFailure/Error:←[0m ←[31mcontroller.should_receive(:check_availability)←[0m
←[31m(#<Customerx::SalesLeadsController:0x6fb3478>).check_availability(any args)←[0m
←[31m expected: 1 time←[0m
←[31m received: 0 times←[0m
←[36m # ./spec/controllers/customerx/sales_leads_controller_spec.rb:7:in `block (2 levels) in <module:Customerx>'←[0m
ここでがどのように機能するかはよくわかりませんshould_receive
。このようなケースをいくつか見てきたので、rspec が失敗する原因を突き止めたいと思います。助けてくれてありがとう。