Ruby on Rails - RSpec:如何设置控制器的实例变量



在我的rails控制器中有一个this方法:

def some_init_func
  # ...
  @inst_var = 1
  # ...
end

和后面的

do_something_with(@inst_var)

如何在RSpec中设置这个实例变量?

allow(controller).to receive(:some_init_func) do
  # ???? what goes here ????
end

assign是一个可用于视图测试的RSpec方法,但不支持控制器测试。控制器通常被期望设置实例变量,所以RSpec不允许设置它们,但允许检查它们(即通过assigns)。

为了回答你的问题,Ruby在所有对象上都有一个可用的instance_variable_set方法,你可以从你的控制器测试中调用,如下所示:

controller.instance_variable_set(:@inst_var, 1)

请参阅http://ruby-doc.org/core-2.2.2/Object.html#method-i-instance_variable_set获取文档,并注意半开玩笑的解释。

如果set_inst_variable是一个公共方法,那么直接调用controller.set_inst_variable

(通常最好通过类的公共接口进行测试,而不是更改其内部状态)。

相关内容

  • 没有找到相关文章

最新更新