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 构造函数确实给出了正确的日期。
我正在开发一个 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 构造函数确实给出了正确的日期。