0

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を定義した後でも、見つからないというエラーが発生します。

4

0 に答える 0