应该:我如何在设置之外使用实例变量或应该阻止?

时间:2010-04-20 01:10:16

标签: ruby unit-testing shoulda

我正在尝试做以下事情:

@special_attributes = Model.new.methods.select # a special subset
@special_attributes.each do |attribute|
  context "A model with #{attribute}" do
    setup do
      @model = Model.new
    end
    should "respond to it by name" do
      assert_respond_to @model, attribute
    end
  end
end

但是,@special_attributes在运行单元测试时超出范围,在第2行留下了一个nil对象。我无法弄清楚在何处/如何定义它以使其在范围内。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

得到它(我认为)。 Shoulda正在Shoulda :: Context的上下文中执行块。在上面的例子中,@ special_attributes是我的测试类的实例变量,而不是Shoulda :: Context。要解决这个问题,只需在上下文块中使用局部变量,而不是使用实例变量。

所以,例如:

context "Model's" do
  model = Model.new
  special_attributes = model.methods.select # a special subset
  special_attributes.each do |attribute|

    context "attribute #{attribute}" do
      setup do
        @model = model
      end
      should "should have a special characteristic"
        assert_respond_to @model, attribute
        ...
      end
    end

  end
end