2014-09-02 71 views
4

我繼承了一些FactoryGirl工廠,這些工廠並沒有真正的工作,我正試圖讓他們努力。部分原因是使用了FactoryGirl.lint。然而到目前爲止,我已經能夠找到它的工廠失敗,並且對於任何一個個體,運行從FactoryGirl.lint獲取錯誤

x = FactoryGirl.build :invalid_factory 
x.valid? # returns false as expected 
x.errors # prints out the validation errors for that object 

我希望做的是避免這樣做,每個工廠。有沒有辦法快速得到FactoryGirl.lint寫出每個無效工廠的錯誤?要通過的標誌,要設置的參數?該文件是非常稀疏的.lint

回答

6

循環通過FactoryGirl.factories執行您的每個工廠檢查。

FactoryGirl.factories.map(&:name).each do |factory_name| 
    describe "#{factory_name} factory" do 

     # Test each factory 
     it "is valid" do 
     factory = FactoryGirl.build(factory_name) 
     if factory.respond_to?(:valid?) 
      # the lamba syntax only works with rspec 2.14 or newer; for earlier versions, you have to call #valid? before calling the matcher, otherwise the errors will be empty 
      expect(factory).to be_valid, lambda { factory.errors.full_messages.join("\n") } 
     end 
     end 

This script從FactoryGirl維基展示瞭如何自動使用RSpec的檢查,並使用保護始終覈實工廠是有效的。