btakita/rr — Issue #75: Problems with mocking an ActiveRecord model method
Author: mikeys
Created: 2011-12-13 11:02:04+00:00
State: open

Consider the following class and methods: (This class is obviously much more complete, but for the sake of this thread...):

class Order < ActiveRecord::Base

def check
if (self.user.phone == "55555555") do
self.a_certain_method
return
end
end

def a_certain_method
# Real implementation goes here
end

end

And the following Unit Test:

describe :do_route do
it "should call a_certain_method if user phone number matches 55555555" do
# Create a user
user = Factory(:user)

# Set hard-coded phone number
user.phone = "55555555"
user.save!

# Create an order made by the ordering user
order = Factory(:order, :ordering_user => user)

# Set expectation for a "a_certain_method" call
mock(order).a_certain_method

# Call the tested method
order.check
end
end

From some reason, the above test produces an `RR::Errors::TimesCalledError` error, which claims that `a_certain_method` was called 0 times instead of 1... I've been searching around the web for a solution with no luck.

I've tried building a similiar test on a non-activerecord class, and the test produces no errors.
I've used the debugger to check that it does reach the `self.a_certain_method` line, and also tried using the following instead of `mock(order).a_certain_method`:

any_instance_of(Order) do |o|
mock(o).a_certain_method
end

Does anyone have any idea how to solve this issue since i'm kind of desperate...