我想为Rspec测试创建一个活动记录模型。
然而,这个模型有回调,即: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
失败/错误:在(:build){撤回请求.class.skip_callback(:before_create)}之后
无方法错误:
类的未定义方法“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)
失败/错误:撤回请求.skip_callback(:before_create)
How to save a model without running callbacks in Rails
我也试过了
WithdrawalRequest.skip_callbacks = true
这也不管用。
----------编辑-----------
我的工厂功能被编辑为:
after(:build) { WithdrawalRequest.skip_callback(:create, :before, :before_create) }
我的before_create函数如下所示:
class WithdrawalRequest < ActiveRecord::Base
...
before_create do
...
end
end
----------编辑2-----------
我将before_create更改为一个函数,以便可以引用它。这两者中的任何一种都是更好的做法吗?
class WithdrawalRequest < ActiveRecord::Base
before_create :before_create
...
def before_create
...
end
end