如何在Rspec中存储下面的set_headers
类方法?
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
答案 0 :(得分:0)
快速测试一下,发现这应该有效:
controller.class.stub(:set_headers).and_return({this: 'params'})
答案 1 :(得分:0)
这里有很多问题:
set_headers
时会调用RegularController
。这在规范运行之前很久就会发生,因此对set_headers
方法进行存根将不起作用。RegularController
类定义中,set_headers
的接收方为RegularController
(因为类定义中的self
是类对象本身)。您尝试过的存根在set_headers
的任何实例上存根ApplicationController
,但它不是ApplicationController
的实例方法。我无法真正推荐如何实现您想要做的事情,因为您不清楚自己要做什么。