Search code examples
ruby-on-railsrspecfactory-bot

Skip callbacks on Factory Girl and Rspec


I'm testing a model with an after create callback that I'd like to run only on some occasions while testing. How can I skip/run callbacks from a factory?

class User < ActiveRecord::Base
  after_create :run_something
  ...
end

Factory:

FactoryGirl.define do
  factory :user do
    first_name "Luiz"
    last_name "Branco"
    ...
    # skip callback

    factory :with_run_something do
      # run callback
  end
end

Solution

  • I'm not sure if it is the best solution, but I have successfully achieved this using:

    FactoryGirl.define do
      factory :user do
        first_name "Luiz"
        last_name "Branco"
        #...
    
        after(:build) { |user| user.class.skip_callback(:create, :after, :run_something) }
    
        factory :user_with_run_something do
          after(:create) { |user| user.send(:run_something) }
        end
      end
    end
    

    Running without callback:

    FactoryGirl.create(:user)
    

    Running with callback:

    FactoryGirl.create(:user_with_run_something)