我的方法:
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次。
答案 0 :(得分:0)
如图所示,put_customer
是M1
实例方法,它将get_customer
称为实例方法。但是,您正在调用put_customer
并将get_customer
模拟为模块或类方法。
在任何情况下,假设put_customer
实际上被定义为类/模块方法,您遇到的问题是您在调用代码后设置了期望有问题。在 M1::put_customer
期望之后,您的should_receive
来电需要