0

考虑以下类和方法:(这个类显然更完整,但是为了这个线程......):

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

有没有人知道如何解决这个问题,因为我有点绝望......

4

1 回答 1

0

我弄清楚了问题所在,因为该号码已经在数据库中,所以它失败了。所以它无法保存硬编码的 user.phone 更改。

不过感谢您的帮助:)

于 2011-12-14T13:51:30.257 回答