我正在测试一个带有创建后回调的模型,我只希望在测试时在某些情况下运行该回调.如何跳过/运行工厂的回调?

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)

Ruby-on-rails相关问答推荐

如何在_serialize之前执行代码?""或者如何在序列化属性之前对属性进行清理?

复制我的活动时,活动描述没有复制过来

在 Rails 6.1 升级后,作业(job)规范使用 Minitest::UnexpectedError 包装错误

'elseif' 还存在吗?

设计 token_authenticable 已弃用,有什么替代方案?

rake assets:precompile try 连接到数据库

为什么在保存对象后使用重新加载方法? (Hartl Rails Tut 6.30)

如何让 Rspec 运行嵌套在文件夹下的所有测试?

Rails 中页面视图的简单计数器

HABTM 关系 - 如何根据关联模型的属性找到记录

activerecord 查找所有未包含在数组中的内容

如何将变量传递给render_to_string?

Rails 3.1 插件 gem、虚拟测试应用程序、rspec

Rails:立即渲染并退出

对象不支持此属性或方法 Rails Windows 64bit

我们如何在 Rails Mailer 中设置邮箱发件人的名称?

如何对这个哈希数组进行分组?

Rails Associations - has_many => :through - 但相同的模型

在 Rails 中,在特定时区创建特定时间(不是现在)的最佳方式是什么?

错误:无法在 Mavericks 上构建 gem 原生扩展