Ruby tally方法:如何在Minitest中验证日期键哈希值
正确的Minitest断言写法
问题根源
- 你构造的
new_date日期错误——要验证的是2024-07-07,但代码里写的是7月8日 - 哈希
include?方法用法有误,且pluck(:date)返回的实例类型和你构造的Time实例不匹配:如果数据库date字段是纯日期类型,pluck(:date)返回的是Date实例,用Time实例当键自然找不到对应值。
正确写法示例
方式一:直接断言目标日期对应的值
# 构造正确的Date实例(对应2024-07-07) target_date = Date.new(2024, 7, 7) # 取出哈希中该日期对应的值,断言等于11 assert_equal 11, Available.all.reload.pluck(:date).tally[target_date]
方式二:先验证键存在,再断言值
如果需要同时确认日期存在且值正确,可以分两步:
target_date = Date.new(2024, 7, 7) date_tally = Available.all.reload.pluck(:date).tally assert date_tally.key?(target_date) assert_equal 11, date_tally[target_date]
特殊情况:数据库字段是datetime类型
如果你的date字段实际是datetime类型,pluck(:date)会返回Time实例,这时要构造匹配时区和时间的Time对象:
# 构造对应日期的Time实例,时区和Rails应用保持一致 target_time = Time.new(2024, 7, 7, 0, 0, 0, Time.zone.offset) assert_equal 11, Available.all.reload.pluck(:date).tally[target_time]
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

