2016-06-27 12 views
3

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 

答えて

3

FactoryGirl.define do 
    factory :withdrawal_request, class: 'WithdrawalRequest' do 
    ... 
    after(:build) { WithdrawalRequest.skip_callback(:create, :before, :callback_to_be_skipped) } 
    #you were getting the errors here initially because you were calling the method on Class, the superclass of WithdrawalRequest 

    #OR 
    after(:build) {|withdrawal_request| withdrawal_request.class.skip_callback(:create, :before, :callback_to_be_skipped)} 

    end 
end 
+0

は答えをいただき、ありがとうございます。しかし、私はまだエラーが発生しています(まだコールバックを行っています) before_create do関数で質問を編集しました。このエラーの原因を知っていますか? (詳細は編集をご覧ください) – seokhoonlee

関連する問題