rspec不记录模拟对象方法调用

时间:2014-01-01 21:29:30

标签: ruby rspec

我的方法:

Module M1
def put_customer(somehash)

  customer = get_customer('unique id')
  if customer.nil?
    customer = Customer.new
  end  
  customer.str
  customer['attr1'] = somehash['attr1']
  customer['attr2'] = somehash['attr2']
  customer.save
end

测试:

context "#put_customer" do

  it "should save a new customer" do
    sample_hash = {...}
    mock_customer = double("mock_cusotmer", :[]= , :save => true, :str => "Mock Object")
    Customer.stub(:new).and_return(mock_customer)
    M1.stub(:get_customer).and_return(nil)
    M1::put_customer

    mock_customer.should_receive(:save).and_return(true)
    mock_customer.should_receive(:[]=).exactly(2).times

  end
end

问题是mock_customer说它没有接到一个电话,虽然它打印出“模拟对象”,这让我怀疑它确实收到了模拟对象,虽然由于某种原因它没有记录模拟调用。 失败:预计1次           收到0次。

1 个答案:

答案 0 :(得分:0)

如图所示,put_customerM1 实例方法,它将get_customer称为实例方法。但是,您正在调用put_customer并将get_customer模拟为模块方法。

在任何情况下,假设put_customer实际上被定义为类/模块方法,您遇到的问题是您在调用代码后设置了期望有问题。在 M1::put_customer期望之后,您的should_receive来电需要