Рассмотрим следующий класс и методы: (Этот класс, очевидно, гораздо более полон, но ради этого потока ...):
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
И следующий юнит-тест:
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
По какой-то причине вышеприведенный тест выдает ошибку RR::Errors::TimesCalledError
, в которой утверждается, что a_certain_method
вызывался 0 раз вместо 1 ... Я безуспешно искал в интернете решение.
Я пытался создать похожий тест для неактивного класса записей, и этот тест не выдает ошибок.
Я использовал отладчик, чтобы убедиться, что он достигает строки self.a_certain_method
, а также попытался использовать следующее вместо mock(order).a_certain_method
:
any_instance_of(Order) do |o|
mock(o).a_certain_method
end
Кто-нибудь знает, как решить эту проблему, так как я немного отчаялся ...