2016-05-01 10 views
2

私はFactoryモードを使って開発中のFactoryGirl gemを使用しようとしています(メーラーテストの場合はmoreです)。rails_email_preview gemです。Rails FactoryGirl開発中のアプリケーションenv

Factory not registered: order 

orderは、工場出荷時の名前です:

それはだけ、最初のページロードで動作します

、ページを更新/再ロードした後、私はエラー以下ます。もちろん

スペック/ダミー/アプリ/ mailer_previews /のmymodule/order_mailer_preview.rb

Dir[Mymodule::Core::Engine.root.join('spec', 'factories', '*')].each do |f| 
    require_dependency f 
end 

module Mymodule 
class OrderMailerPreview 
    def confirmation_email 

    o = FactoryGirl.create(:order) 

    OrderMailer.confirmation_email(o) 
    end 
end 
end 

私の工場:ここ

は私のコード(それは私のRailsのエンジンのためのダミーアプリです)ですテスト環境で問題なく動作します。

ご協力いただければ幸いです。

EDIT:あなたは、開発中の工場の女の子をロードするためにFactoryGirl.find_definitionsを呼び出す必要があります

p FactoryGirl.factories 

戻ります(ページのリロード後)

#<FactoryGirl::Registry:0x007ff2c9dd29d0 @name="Factory", @items={}> 

答えて

0

私の問題はDevise gemと結びついていました。 私は、私のイニシャライザに、リロードの都合で工場をクリアするコードを持っています(hereと記載)。 このコードは、いくつかのファクトリがある場合にのみ実行されるため、最初の要求には適用されません。

ActionDispatch::Callbacks.after do 
    # Reload the factories 
    return unless (Rails.env.development? || Rails.env.test?) 

    unless FactoryGirl.factories.blank? # first init will load factories, this should only run on subsequent reloads 
    FactoryGirl.factories.clear 
    FactoryGirl.find_definitions 
    end 
end 

へ:

ソリューションから私の設定/初期化子が/ devise.rbファイルを変更することでした

ActionDispatch::Callbacks.before do 
    # Reload the factories 
    return unless (Rails.env.development? || Rails.env.test?) 

    FactoryGirl.definition_file_paths = [Mymodule::Core::Engine.root.join('spec', 'factories')] 

    # first init will load factories, this should only run on subsequent reloads 
    unless FactoryGirl.factories.blank? 
    FactoryGirl.factories.clear 
    FactoryGirl.sequences.clear 
    FactoryGirl.find_definitions 
    end 
end 

注:before代わりafterのコールバックやカスタムFactoryGirl.definition_file_paths定義の前にfind_definitionsが実行されます。

afterフックを使用するたびに、最初の呼び出しでDeviseエラーが発生します。

0

require 'factory_girl' 
FactoryGirl.find_definitions 

このトリックを行う必要があります。

+0

私はそれを試しましたが運がありません。それでも、初期ロード後に動作し、再ロード時に「Factory no registered」エラーが発生して停止します。 – jmarceli

関連する問題