RailsアプリケーションでFactoryGirlを使用してRSpec機能テストを行っています。ファクトリを作成しているときに、ファクトリで重複するコードを削除するためのプライベートメソッドまたはマクロを定義する必要があることに気付きました。マクロは、ファクトリ定義からのみ呼び出すことができるようなものにする必要があります。親切に助けて
factory :subscriber, :class => Subscriber do
sequence(:name) { |n| "test_user_#{n}" }
sequence(:email) { |n| "test_user_#{n}@example.com"}
association :authentication, factory: :authentication
factory :subscriber_with_subscription do
ignore do
payment_pending_subscriptions 0
purchased_subscriptions 0
active_subscriptions 0
end
after(:create) do |subscriber, evaluator|
count = evaluator.payment_pending_subscriptions
FactoryGirl.create_list(:subscription, count, status: 'payment_pending', :subscriber => subscriber) if count >0
count = evaluator.purchased_subscriptions
FactoryGirl.create_list(:subscription, count, status: 'purchased', :subscriber => subscriber) if count > 0
count = evaluator.active_subscriptions
FactoryGirl.create_list(:subscription, count, status: 'active', :subscriber => subscriber) if count > 0
end
end
end
工場内で次のようなメソッドを定義できる場合
def create_subs count, status
FactoryGirl.create_list(:subscription, count, status: status, :subscriber => subscriber) if count > 0
end
次に、通話を1つの回線/状態に減らすことができます
create_subs evaluate.purchased_subscription, "purchased_subscription"
ただし、create_subsを定義した後でも、見つからないというエラーが発生します。