我使用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_setinstance_variable_get方法不仅给控制器,但因为它是由红宝石提供所有对象提供。逸岸,这两种方法发挥轨道魔法了重要作用:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top