代码之家  ›  专栏  ›  技术社区  ›  keparo

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

  •  0
  • keparo  · 技术社区  · 16 年前

    我想做如下事情:

    @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_属性超出范围,在第2行留下一个nil对象。我不知道在哪里/如何定义它以将其纳入范围。有什么想法吗?

    1 回复  |  直到 16 年前
        1
  •  0
  •   keparo    16 年前

    明白了(我想)。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