Rails 控制器测试中的异常 "undefined method 'strftime' for 43200:Fixnum" 但在实际视图中工作正常

Bizarre "undefined method 'strftime' for 43200:Fixnum" in Rails controller test but works fine in actual view

我正在开发一个 Rails 应用程序(版本 4.2.0),该应用程序的一部分涉及在视图中显示格式化日期。当我使用日期的 strftime 方法在视图中设置格式时,一切正常。然而,与视图相关的控制器测试之一失败,表示 strftime 方法不存在 "Fixnum",尽管 属性我运行上的方法是约会

具体来说,在 View 我有这个:

...
<div><%= @meeting.date.strftime("%B %d, %Y") %></div>
...

控制器测试有这个:

  def setup do
    @person = persons(:bob)
    @meeting = meetings(:important)
  end
  ...
  test "should get show when logged in" do
    log_in_as(@person)
    get :show, id: @meeting.id  # Errors here
    assert_response :success
  end

会议模型的日期属性是一个日期(符合预期):

create_table "meetings", force: :cascade do |t|
  ...
  t.date  "date"
  ...
end

在测试之前,@meeting 变量被设置为 meetings.yml:

中的固定装置之一
important:
  name: Important meeting
  date: 2015-06-24
  ...
  description: At this meeting, important things happen.

这是怎么回事?很奇怪 - 属性 在视图和 rails 控制台中工作正常,但在测试期间出现错误,将 属性 作为 Fixnum 而不是日期。

更新:检查会议及其日期给出以下内容:

puts @meeting.inspect
#<Meeting id: 92075913, name: "Important Meeting", date: "2015-06-24", ..., updated_at: "2015-06-24 22:13:43">

puts @meeting.date.inspect
# Wed, 24 Jun 2015

我需要尽快解决这个问题,因为它在多个测试(控制器和集成测试)中影响了我。

我不使用固定装置,但是 date: 2015-06-24 可能在使用之前没有被转换为正确的 Date 对象。

我最终做了一个测试变通办法。我没有在 meetings.yml 中定义固定装置,而是编写了一个生成一些随机会议的自定义测试辅助方法。那些随机会议的日期在测试中工作得很好。

Date.now 之类的东西传递给 Meeting 构造函数确实给出了正确的日期。