2009-07-21 58 views
16

我試圖設置工廠女孩與測試::單位和應該在Ruby on Rails。我已經安裝了gem,在test/factories目錄下創建了我的工廠文件,並在test/models目錄下創建了我的spec文件。我得到的當前錯誤是'ArgumentError:No such factory:test',這導致我相信test_factory.rb文件沒有被加載?任何想法,我應該改變什麼?設置工廠女孩與測試::單位和Shoulda

這是我的文件。

#test/factories/test_factory.rb 
Factory.define :test do |t| 
    t.name 'test_spotlight' 
    t.label 'test spotlight label' 
end 

#test/modes/test_spec.rb 
require 'test_helper' 
require 'factory_girl' 
class TestTest < Test::Unit::TestCase 
    def setup 
    @test = Factory.build(:test) 
    end 

    context "A test" do 
    should "save with the minimum requirements" do 
     assert @test.save 
    end 
    end 
end 

回答

40

我我的一個項目也遇到了這個問題。我不確定究竟是什麼導致初始化代碼被跳過,但你可以強制加載工廠定義是這樣的:

require 'factory_girl' 
Factory.find_definitions 

希望這會有所幫助。

+1

這對我來說可以放在我的`test_helper.rb`文件中。我跑進使用factory_girl 1.3.3此同時,導軌2.3.11,紅寶石1.8.7和1.0.10打捆這 – Sukima 2011-03-09 15:09:21

+0

工作,甚至爲Rails 3.0.5和Ruby 1.9.2p180 – Nikhil 2011-04-04 10:21:54

0

您是否嘗試過移動

require 'factory_girl' 

測試/ test_helper.rb中

工廠自動加載機制可能取決於調用require的位置。它可以試圖找到工廠測試/模型/工廠/ ** *的*,而不是測試/工廠/ **

0

而不是命名你的工廠文件test_factory.rb,嘗試將其命名爲factory.rb

+0

該文檔說在test/factories目錄下的任何.rb文件都應該被加載 – brad 2009-12-10 00:22:57

2

我有同樣的問題。

require 'factory_girl' 
require File.dirname(__FILE__) + "/factories" 

,你可以做同樣的事情多:最後我做的把我所有的工廠「/test/factories.rb」和我的「/test/test_helper.rb」文件寫入以下行做通過在test_helper中要求它們來保存文件。我還沒有弄清楚爲什麼在「factory_girl's」自述文件中提到的自動包含沒有發生。

1

如果我只需要「factory_girl」在test_helper.rb中,我會得到你所提到的相同的行爲,但如果我需要在我的config /測試/ environment.rb文件(注意我用environmentalist),它會準確地找到了工廠定義沒有任何問題。

我在閱讀工廠女孩rdoc之後試圖將config.gem放在您的環境中。

3

嘗試把這個在test_helper.rb中:

require 'factory_girl' 
Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory| 
    require factory 
end 
2

我也設法擺脫這個問題放上這行到我的environment.rb:

config.gem "factory_girl", :source => "http://gemcutter.org"

同時也要確保你有最新的寶石:

名稱已從「thinkbot-factory_girl」更改爲「factory_girl」,源已更改爲「http://gems.github.com」到「http://gemcutter.org」。

0

有趣。我有一個類似的問題試圖讓黃瓜與factory_girl合作。我原本配置factory_girl要尋找(「config.gem」),但沒有加載在黃瓜環境,充分需要「功能/支持/ env.rb」,同樣的黃瓜確實爲webrat,等等。這只是開始當我明確告訴factory_girl找到Kenny上面提到的定義時就開始工作。

當我刪除了需要從env.rb聲明,完全需要factory_girl在黃瓜環境,效果走了,factory_girl工作開箱。

所以它似乎真的是時候(或在上下文中)factory_girl獲取加載的問題。

2

如果你有這個問題有紅寶石1.9.2,需要預計擴充的路徑。

File.expand_path("test/factories.rb") 

這個patch解決了我的問題。我剛發了一個拉請求。從測試工廠/工廠並沒有自動加載任何更多 - 更新FactoryGirl到1.3.2後 -

require 'factory_girl' 
FactoryGirl.find_definitions 
1

我也碰到了這個問題: 之後,你可以添加到您的test_helper.rb

我可以從DG添加代碼到test_helper.rb中擺脫問題:

Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory| 
require factory 
end 

當運行在TextMate的單項測試,一切都工作得很好,但如運行所有來自命令行的使用Rake測試的單元測試:單元失敗並出現DuplicateDefinitionError錯誤(我讀過它可能與ruby 1.8.x有關)。所以我稍微改變了代碼:

if (!Factory.factories || Factory.factories.empty?) 
    Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory| 
    require factory 
    end 
end 
0

由於不同的人使用Rails的不同版本(2.x和3的唯一的額外.x是現在最常見的),重要的是包括其他相關的環境(最重要的是你使用哪個版本的Rails)。從factory_girl網頁版本1.3.0的文件(http://rubydoc.info/gems/factory_girl/1.3.0/frames):

If you want to use factory_girl with Rails 3, use the factory_girl_rails gem, not this one.

If you want to use factory_girl with Rails versions prior to Rails 3, use version 1.2.4.

如果您有與加載的麻煩,我建議確保你使用的是正確的版本。我假設,factory_girl大於1.2.4的版本是作爲'factory_girl_rails'(Rails 3.0+)gem的依賴項引入的。

0

我加 require 'factory_girl' require File.dirname(FILE) + "/factories" 到spec_helper.rb whiche幫助,但後來我rememberd叉勺有時BA有點問題,所以我重新啓動叉勺沒有require,然後它工作得很好。