gpt4 book ai didi

ruby-on-rails - Ruby on Rails 单元测试在日期测试中失败

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:31 24 4
gpt4 key购买 nike

Ruby/Rails 的一些单元测试正则表达式问题。

运行:

  • rails 4.0.0
  • ruby 2.0.0-p247
  • RVM 1.23.5
  • Mac 操作系统 10.8.5

编写一个 applicaton_helper 方法,该方法将根据日期的时间来格式化日期。方法如下:

module ApplicationHelper
def humanize_datetime time
time = Time.at(time)
date = time.to_date

today = Date.today

time_format = "%-I:%M %p"

#if the time is within today, we simply use the time
if date == today
time.strftime time_format

# if the time is within the week, we show day of the week and the time
elsif today - date < 7
time.strftime "%a #{time_format}"

# if time falls before this week, we should the date (e.g. Oct 30)
else
time.strftime "%b %e"
end
end
end

这似乎给出了预期的结果,但由于某种原因,以下测试失败了:

require 'test_helper'

class ApplicationHelperTest < ActionView::TestCase

test "humanize_dateime should display only time when datetime is within today" do
formatted = humanize_datetime Time.now
assert_match /\A\d{1,2}\:\d\d (AM|PM)\z/, formatted
end

test "humanize_datetime should display day of week and time when datetime is not today but within week" do
yesterday_formatted = humanize_datetime (Date.today - 1).to_time # yesterday
assert_match /\A[a-zA-z]{3} \d{1,2}\:\d\d (AM|PM)\z/, yesterday_formatted

within_week_formatted = humanize_datetime (Date.today - 6).to_time # just within this week
assert_match /\A[a-zA-z]{3} \d{1,2}\:\d\d (AM|PM)\z/, within_week_formatted
end

test "humanize_datetime should display date when datetime is before this week" do
last_week_formatted = humanize_datetime (Date.today - 7).to_time
assert_match /\A[a-zA-Z]{3} \d{1,2}\z/, last_week_formatted
end
end

最后一次测试失败,给出

1) 失败:ApplicationHelperTest#test_humanize_datetime_should_display_date_when_datetime_is_before_this_week [/Users/mohammad/rails_projects/stopsmoking/test/helpers/application_helper_test.rb:20]:预期/\A[a-zA-Z]{3}\d{1,2}\z/匹配“Oct 8”。

这真的很奇怪,因为正则表达式对我来说看起来没问题,而且我已经在 http://rubular.com/ 上测试了表达式.这里的所有其他测试都通过了。我还尝试删除字符串定界符的开头/结尾以及 \d 之后的量词。

关于为什么会发生这种情况有什么想法吗?

最佳答案

如果日期 < 10,你的 humanize_datetime 会添加一个额外的空格,因为 "%b %e"。结果字符串不是 "Oct 8",而是 "Oct 8"

您应该使用 "%b %-d" 或更改您的正则表达式。

编辑:减号前缀可能不适用于所有系统,参见 this回答更多详情。

关于ruby-on-rails - Ruby on Rails 单元测试在日期测试中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com