Rails RR UnitTesting: проблемы с моделированием метода модели ActiveRecord - PullRequest
0 голосов
/ 13 декабря 2011

Рассмотрим следующий класс и методы: (Этот класс, очевидно, гораздо более полон, но ради этого потока ...):

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

Кто-нибудь знает, как решить эту проблему, так как я немного отчаялся ...

1 Ответ

0 голосов
/ 14 декабря 2011

Я выяснил, в чем проблема, она не удалась, так как номер уже был в базе данных. поэтому не удалось сохранить жестко запрограммированное изменение user.phone.

Спасибо за помощь, хотя:)

...