我怎样才能在存根在Rails中的超类的before_filter?
-
22-09-2019 - |
题
我使用RR进行嘲讽和RSpec的磕碰,我已经跨越运行的情况,我想从一个超类控制器,它集的一些实例变量的存根的方法。我可以计算出如何存根方法调用,如果我调试我可以看到我的存根块被调用,但我不能让实例变量的块传播到我测试的类。
只需进行分解:
class A < ApplicationController
before_filter :bogglesnap
def bogglesnap
@instancevar = "totally boggled"
end
end
class B < A
def do_something_with_instance
if @instancevar
....
else
....
end
end
end
这是基本的设置,等等然后在我的测试对于控制器B我想从A bogglesnap方法存根出一套@instancevar到我想要的东西。我只是无法弄清楚如何做到这一点。
我试过RR的instance_of磕碰,只是删空控制器定义:
stub.instance_of(A).bogglensap { @instancevar = "known value" }
stub(controller).bogglesnap { @instancevar = "known value" }
的这些但既不似乎工作,那么,他们不工作:)
有没有人对你应该如何能存根方法调用出来,并将它设置实例变量的指针?我假设它具有与该块运行的情况下做的,但我希望有人已经越过之前像这样运行。
由于
解决方案
您可以通过调用对象实例使用instance_variable_set
方法并将其设置为任何你想要的,像这样
controller.instance_variable_set("@instancevar", "known value")
同样,如果你想在你的规范或调试获取实例变量的值或者做别的事情从类的外部,那么你可以通过执行获得价值
controller.instance_variable_get("@instancevar")
提醒一下,instance_variable_set
和instance_variable_get
方法不仅给控制器,但因为它是由红宝石提供所有对象提供。逸岸,这两种方法发挥轨道魔法了重要作用:)
不隶属于 StackOverflow