2010-09-13 53 views
0

我想寫一個規範是例子的數量,即「它」應該......「做」是在運行時確定的。我試圖把「它」的方法在我自己的方法,這樣我可以把它多次:如何在運行時向rspec添加示例?

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

然而,「它」的方法不能從目前的規格::例子:: ExampleGroup ::子類實例。

回答

5

爲了避免重複代碼,有時我做這樣的事情:

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方法可用。

+0

感謝您的快速響應。感謝這些例子。如果您在開發時知道需要運行多少個示例,那麼它們就可以工作。不幸的是,就我而言,我需要在運行時確定這一點。 – Kerry 2010-09-14 16:33:30

+0

那麼我也描述瞭如何讓你的'new_method'思想起作用。 – 2010-09-14 20:32:18