我该如何使用rspec测试这个类?

时间:2014-04-03 07:01:16

标签: ruby-on-rails ruby-on-rails-4 rspec

我创建了一个创建新交互的服务对象。创建交互时,这将启动逻辑以生成潜在客户。根据interaction_type生成潜在客户。

见下面的代码:

class InteractionCreation

  def initialize params = {}
    @interaction = Interaction.new(params)    
  end

  def call
    if interaction.save
      generate_lead
    end

    return interaction
  end

  private

  def interaction
    @interaction
  end

  def generate_lead
    LeadGeneration.new(interaction).call
  end
end

我尝试了一些事情,但我不确定我应该测试多少。可以很容易地测试是否生成了交互,但是我应该对LeadGeneration创建的潜在客户做任何事情。我试图最小化公共接口的大小,现在只测试它。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我至少要这样做:

describe InteractionCreation do

  let(:interaction) { double :interaction }
  let(:params)      { double :params }
  let(:action)      { described_class.new(params).call }
  let(:lead)        { double(:lead) }

  before do
    Interaction.should_receive(:new).with(params).and_return interaction
    LeadGeneration.stub(:new).and_return(lead)
  end

  it 'doesnt call Lead Generation when save ko' do
    interaction.stub(:save).and_return false
    lead.should_not_receive :call

    action
  end

  it 'calls Lead Generation when save ok' do
    interaction.stub(:save).and_return true
    lead.should_receive :call

    action
  end

end

也许应该检查返回值,在这种情况下,添加另一个规范:)

答案 1 :(得分:0)

您可以查看公共方法,例如'初始化'并且打电话给'使用rspec。检查initialize方法是否正确分配属性。对于“互动”#39;方法,您可以检查" generate_lead'如果保存了交互,则调用。