1. ホーム
  2. ruby-on-rails

[解決済み] ファクトリーガールとRspecのコールバックのスキップ

2022-05-13 18:48:43

質問

作成後のコールバックがあるモデルをテストしていますが、テスト中に時々しか実行したくありません。ファクトリーからコールバックをスキップ/実行するにはどうしたらよいでしょうか。

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

工場です。

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

    factory :with_run_something do
      # run callback
  end
end

どのように解決するのですか?

ベストな解決策かどうかはわかりませんが、私はこの方法を用いて実現することに成功しました。

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

コールバックなしで実行。

FactoryGirl.create(:user)

コールバックで実行する。

FactoryGirl.create(:user_with_run_something)