0

set_headers以下のRspecでクラスメソッドをスタブするにはどうすればよいですか?

application_controller.rb

class ApplicationController < ActionController::Base

  def self.set_headers(name) 
     after_filter do
       object = instance_variable_get("@#{name}")
       headers['fancy'] = object.fancy_header
     end
  end

end

regular_controller.rb

class RegularController < ApplicationController
  set_headers :regular

  def index
    # do regular stuff
  end
end    

以下を試しましたが、動作しません。

regular_controller_spec.rb

describe RegularController do
  before(:each) do
    ApplicationController.any_instance.stub(:set_headers).and_return({this: 'params'})
  end
end
4

2 に答える 2

1

これをすばやくテストしたところ、これが機能することがわかりました。

controller.class.stub(:set_headers).and_return({this: 'params'})  
于 2012-10-28T01:43:52.597 に答える
0

ここには複数の問題があります。

  • set_headersRegularControllerが定義されたときに呼び出されます。これは仕様が実行されるずっと前に発生するため、set_headersメソッドをスタブ化しても影響はありません。
  • クラス定義では、RegularControllerのレシーバーはset_headersですRegularController(selfクラス定義内にはクラス オブジェクト自体があるため)。試行されたスタブはset_headersのインスタンスでスタブ化されていますがApplicationController、 のインスタンス メソッドではありませんApplicationController

あなたがやろうとしていることは明確ではないので、あなたがやろうとしていることを達成する方法を本当にお勧めすることはできません.

于 2012-10-28T02:01:50.733 に答える