仕様を少しでも最適化しようとしています。私は通常ネストされたリソースとユーザーのテストデータを作成することに問題があります。私は通常、データを設定する前(:それぞれ)で終わります。これは、私の仕様のうち120以上で実行されます。 A)の動きは:私は私のテストデータ設定RSpec Railsテストデータ
def self.merge(lists)
merged_list = lists.first.account.subscriber_lists.build
name = "Merge of "
lists.each do |list|
name << "'#{list.name}', "
list.items.each do |item|
merged_list.items.build(item.dup.attributes)
end
end
merged_list.name = name.chop.chop
merged_list.save!
merged_list.reload # I use this to filter out duplicates via validations
end
私のオプションを短縮することができない理由はここに(それは正確ではありませんが、あなたはポイントを取得する必要があります)
def setup_test_data
@user = FactoryGirl.create(:admin_with_account)
@account = @user.account
3.times do |n|
list = FactoryGirl.create(:list)
list.items << FactoryGirl.create_list(:item, 3)
@account.lists << list
end
end
before(:each){setup_test_data}
subject{List.merge(list1, list2)}
it{should have(6).items}
をと:私はあなたをお見せしましょうバックコントローラにいくつかのロジック、アカウントにあまり依存性は、コントローラ B)スタブに保存/もっとたくさんモックが、ネストされたリソース+団体でそれはここに)あなたのアイデアを
Cを行うのは難しい:
おかげ レイ
ありがとう、私はおそらくそれが最善の方法かもしれないと考えました。私はfixture_builderを使用して複数のフィクスチャをセットアップし、次にsetup_dataメソッドをデータベースから取り出します。私はまだ工場出荷時のシーケンスとDatabaseCleanerがどのくらい正確に動作しているか、少し苦労しています。しかし、私は本当にそれを嘲笑してスタブしたくないので、各仕様の統合テストが過去にうまくいってくれました。それはちょうど遅く、いつもきれいなコードで来るとは限りません。 – Ray
質問がありましたらお気軽にお問い合わせください!ファクトリーの女の子はかなり良いドキュメンテーションを持っているので、GitHubページでDatabaseCleanerを実行するので、始めるのに適しています。黙ってスタブすることは、テストが重要であり、繰り返されるテストや「悪い」テストを手短に書くことからあなたを助けることができるので、恥ずかしがり屋ではありません。 – MrDanA