0

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 が失敗する原因を突き止めたいと思います。助けてくれてありがとう。

4

0 に答える 0