Как я могу добавить примеры в rspec во время выполнения? - PullRequest
0 голосов
/ 13 сентября 2010

Я пытаюсь написать спецификацию, в которой приведено количество примеров, т. Е. «Это« следует ... »делать» определяется во время выполнения. Я попытался поместить метод 'it' в свой собственный метод, чтобы я мог вызывать его несколько раз:

def new_method(test)  
    it "#{test} should... " do  
    end  
end  

Однако метод 'it' недоступен из текущего экземпляра Spec :: Example :: ExampleGroup :: Subclass.

1 Ответ

5 голосов
/ 13 сентября 2010

Чтобы избежать дублирования кода, иногда я делаю что-то вроде этого:

describe SomeOjbect do
  %w(a b c d e f g).each do |val|
    it "should have a value of #{val}" do
      # ...
    end
  end
end

, что приведет к созданию 7 примеров в спецификации.Я полагаю, если бы вы действительно были настроены на использование метода, вы могли бы сделать что-то вроде этого:

def new_method(grp, test)
  grp.instance_eval do
    it "#{test} should..." do
      # ...
    end
  end
end

describe SomeObject do
  new_method(self, "a")
  new_method(self, "b")
  new_method(self, "c")
  new_method(self, "d")
  # ...
end

Здесь вы передаете self, который является областью действия блока describe, и instance_eval позволяет выполнять код, как если бы вы были в этом блоке, поэтому доступен метод it.

...