Rspecテストのアクティブレコードモデルを作成したいと思います。Railsの作成時にコールバックをスキップ
しかし、このモデルには、before_createメソッドとafter_createメソッドというコールバックがあります(私が間違っていない場合、これらのメソッドはコールバックと呼ばれ、検証ではないと思います)。
コールバックをトリガーしないでオブジェクトを作成する方法はありますか?
私は私の場合のために動作しない/しようとしているいくつかの以前のソリューション:
更新方法:私はオブジェクトを作成したいと私ができるので
update_columnや他の更新方法は動作しません。オブジェクトが存在しない場合は更新メソッドを使用しません。
ファクトリー・ガールとビルド後:
FactoryGirl.define do
factory :withdrawal_request, class: 'WithdrawalRequest' do
...
after(:build) { WithdrawalRequest.class.skip_callback(:before_create) }
end
end
失敗/エラー:(:ビルド){WithdrawalRequest.class.skip_callback(:before_create)}
NoMethodError: 未定義のメソッド `skip_callback後'クラスのクラス:クラス
Skip callbacks on Factory Girl and Rspec
スキップコールバック
WithdrawalRequest.skip_callback(:before_create)
withdrawal_request = WithdrawalRequest.create(withdrawal_params)
WithdrawalRequest.set_callback(:before_create)
失敗/エラー:WithdrawalRequest.skip_callback(:before_create)
NoMethodError:#
How to save a model without running callbacks in Rails
のための未定義のメソッド `_before_create_callbacksは私も
を試してみましたWithdrawalRequest.skip_callbacks = true
どちらもうまくいきません。
---------- EDIT -----------
私の工場の機能がに編集されている:私のbefore_create機能は次のようになります
after(:build) { WithdrawalRequest.skip_callback(:create, :before, :before_create) }
:私はそれを参照できるように
class WithdrawalRequest < ActiveRecord::Base
...
before_create do
...
end
end
---------- EDIT 2 -----------
Iは、関数にbefore_createを変え。これらのどちらかがより良い方法ですか?参照の回答に基づいて
class WithdrawalRequest < ActiveRecord::Base
before_create :before_create
...
def before_create
...
end
end
は答えをいただき、ありがとうございます。しかし、私はまだエラーが発生しています(まだコールバックを行っています) before_create do関数で質問を編集しました。このエラーの原因を知っていますか? (詳細は編集をご覧ください) – seokhoonlee