2016-06-26 4 views
0

は、だから私は、コードのこの部分を持っているいくつかの工場のために毛羽立ち無効。FactoryGirlは私に頭痛を引き起こしている私のrails_helper</p> <pre><code>config.before(:suite) do begin FactoryGirl.lint end </code></pre> <p>に

class User 
    has_one :student_profile, class_name: Student 
    has_one :employee_profile, class_name: Employee 
end 

今のものは、ユーザー登録時に、ですが、私は、ユーザーのタイプに応じて異なる電子メールのレイアウトを送信する必要があります(私は分類しています登録されています。私はこのようないくつかの添付プロファイルを持つことができ、ユーザークラスが持っています自分のプロファイル、および「強い」プロファイルに応じて、私は適切なレイアウトに切り替えます。

私は、main_profileタイプの私の登録プロセスで

def layout_for_user(user) 
    case user.main_profile // user.employee_profile || user.student_profile || user 
    when Employee 
     'layouts/mailer/company' 
    when Student 
     'layouts/mailer/student' 
    else 
     fail ArgumentError, 'Unknown layout for profile' 
    end 
end 

に基づいてレイアウトを追加するために工夫メーラーをオーバーライドしています私は少なくともoを構築することを確認します確認を送信/ユーザーを保存する前に、NEプロファイルタイプ。

しかし、ファクトリー・ガールが&は工場のすべての種類を保存構築しようとすると思われるので、私はいくつかの工場をスキップするFactoryGirl.lintを伝える方法はありuser - Unknown layout for profile (ArgumentError)

の多くを取得していますか?それは、例えばどのプロファイルのないユーザーを持ってしても意味がありませんが、エラーはまだ私のuser工場だけでインスタンス化してはいけません抽象工場のいくつかの並べ替えである

# rspec/factories/user.eb 
FactoryGirl.define do 
    factory :user do 
    ... 

    trait(:student) do 

    after(:build) do |user, evaluator| 
     user.student_profile = build(:student_profile, 
     user: user) 
     end 
    end 

    factory :student_user, traits: [:student] 
end 

ここで生成される(それ以外の場合は、原因となります上記で説明したエラー)を解決する方法はありますか?私はこの行のコメントを考えていますFactoryGirl.lint

+1

私はリンターをスキップして、各model_specの初めにテストを行うことを好みます。 それ以外の場合は、特定のモデルをスキップすることができます。https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#linting-factories – davidwessman

答えて

1

lintをデフォルトの引数で実行する必要はありません。いくつかのためにリンティングを無効にするには - 工場は、事前にフィルタリングすることができます。

FactoryGirl.lint(FactoryGirl.factories.reject{|f| f.name == :some_abstract_factory }) 
1

あなたの工場は、これまで永続化する必要がない場合、あなたはcustomize your factory's way to persist the objectできる:

FactoryGirl.define do 
    factory :foo do 
    to_create { true } # no-op 

    # ... 

これは、糸くずのステップは、あなたがFactoryGirl.create(:foo)を行うときに、それはもはやsave!を呼び出すことを警告して、成功することができます。

関連する問題

 関連する問題