RSpecとFactoryGirlを使用してRails 4で行われたERPソリューションのモデルがたくさんある複雑なコードベースで作業しています。幸いにも、それは理想的ではありませんが、合理的な数ではなく、多くのテストをしています。苦労している点の1つは、常に複雑な工場のセットアップでした。たとえば、簡単な請求書を作成するには、多くの作業が必要です。複雑なファクトリを作成するFactoryGirlの標準的な方法(モデル結合に関する懸念)
product = create(:product, business: test_business, price: 100)
activity = create(:activity, business: test_business)
create(:sales_point, business: test_business, fiscal_number: 1)
user = create(:user)
Invoice.create!(business: test_business,
sales_point: 1,
invoice_type: InvoiceType::INVOICE_B,
receptor_fiscal_category: FiscalCategory::BUSINESS_A,
details: [InvoiceDetail.new(product: product,
description: product.name,
unitary_amount: 100,
quantity: 1,
amount: 100,
activity: activity)],
total_net: 100,
total_tax: 21,
total_amount: 121,
created_by: user,
updated_by: user)
これは、テスト用の簡単な請求書を作成するためのものです。ファクトリーガールクリエイターであるThoughtbotsは、実際には同じモデルの複数の工場や複雑すぎることに反対しています。そして、なぜ、あなたが工場であまりにも多くの魔法をやるようになると、彼らはあなたのテストに結びつきすぎて、突然何かを変えて、何百ものテストが失敗することを理解することができます。
これを変更するか、「あまりにもスマート」にするのではなく、Invoice(例:invoce_by_total_ammount、invoice_by_product_list、invoice_cashなど)のような複雑なモデルの工場が5~10バージョンになりました。
(100〜モデル)のような大きなコードベースで作業したことがある人は、を試してみてください。このような複雑なセットアップを扱う標準的な方法は何ですか?それはどれくらい成功したのですか?
これはすべて正常に見えます。 factory_girlの標準的なアプローチは、関連するオブジェクトを自動的に作成する請求書ファクトリを作成することです。あなたはそれを試しましたか?それはあなたのためにうまくいきましたか? factory_girlに複数のアソシエーションに対して同じ過渡的な依存関係を使用させるには、いくつかの具体的な手引きが必要ですが、それが問題であるかどうかは私には分かりません。 –
はい、私たちはそれを行いました。しかし、異なるテストでは、インボイス生成モデルに異なる調整が必要で、工場に非常に結合し始めました。また、約5-6種類の請求書ファクトリで終了しました。 –
恐らく、工場のいくつかのバージョンを表示し、それらを統合する方法を尋ねるべきでしょう。 –