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

常规控制器.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方法进行存根不会有任何影响。
  • 在您的类定义中, isRegularController的接收者(因为在类定义中是类对象本身)。您尝试的存根在 的任何实例上存根,但它不是 的实例方法。set_headersRegularControllerselfset_headersApplicationControllerApplicationController

我真的不能推荐如何实现你想要做的事情,因为不清楚你想要做什么。

于 2012-10-28T02:01:50.733 回答