Следует: Как бы я использовал переменную экземпляра за пределами установки или должен заблокировать? - PullRequest
0 голосов
/ 20 апреля 2010

Я пытаюсь сделать что-то вроде следующего:

@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. Я не могу понять, где / как определить его, чтобы ввести его в область. Есть мысли?

1 Ответ

0 голосов
/ 20 апреля 2010

Понял (я думаю). Должна выполнить блок в контексте Должа :: Контекст. В приведенном выше случае @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
...