【发布时间】:2014-03-28 12:02:15
【问题描述】:
我有三种模型 - 联系、互动和潜在客户。
当发生产生潜在客户 (is_lead) 的交互时,我将更新潜在客户状态或创建新潜在客户(取决于它是否存在)。针对联系人捕获潜在客户。
为了实现这一点,我使用了调用 process_interaction 的回调 after_commit。见下文
class Interaction < ActiveRecord::Base
belongs_to :contact
has_many :leads
enum interaction_type: { file_download: 1, email: 2, telesale: 3, registration: 4 }
after_commit :process_interaction, on: [:create, :update]
private
def process_interaction
if file_download? || email? || telesale?
lead = Lead.find_or_initialize_by(contact_id: contact_id)
self.is_lead ? lead.active! : lead.stale!
end
end
end
代码相当简单,并且可以正常工作。我的问题是我应该如何进行测试?我真的不知道如何正确测试回调。或者如何更改我的代码以使其更具可测试性。我已经阅读了很多文章,只是无法弄清楚如何做到这一点。我也不确定这个逻辑是否应该放在我的交互模型中。我仍在努力掌握我的依赖方向。
请注意,我确实尝试通过这样做来将交互注入到潜在客户中
def process_interaction
if file_download? || email? || telesale?
Lead.process_potential_lead(interaction)
end
end
这将实现相同的效果,但处理将在引导端完成。不确定如何在我的交互规范中对此进行测试,也不确定哪种方式更好。
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-4 rspec