如何在Rails yml灯具中保持前导零?

时间:2013-05-29 08:59:44

标签: ruby-on-rails yaml minitest

我试图在Rails 4 beta1的“minitest”测试中使用“food_descriptions”夹具:

butter:
 NDB_No:       "01001"
 FdGrp_Cd:     "0100"
 Long_Desc:    "Butter, salted"

我的测试是:

it "must work" do
  food_descriptions(:butter).NDB_No.must_equal "01001"
end

然而,当我运行测试时,我收到此错误:预期:“01001”实际:1001 我不明白为什么这个号码不被识别为字符串。我已经读过yml将以0开头的值视为八进制值,因此添加引号应足以将其视为字符串但不起作用。我也尝试过管道“|”签署,但也不起作用。 知道为什么吗?

2 个答案:

答案 0 :(得分:1)

快速回答(TL; DR)

  • YAML 1.2前导零可以通过引用标量值来保留。

上下文

  • YAML 1.2
  • 带前导零的标量值

问题

  • 场景:开发人员希望在YAML 1.2文件中指定前导零的标量值。
    • 解析时,前导零被省略或截断

解决方案

  • 引用YAML中的标量值,将其解析为字符串。
  • 为非数字值保留前导零。

陷阱

  • 数据库或编程语言上下文的数据类型转换可能会将字符串标量转换为数字标量值。

答案 1 :(得分:0)

事实证明问题不是我想象的那样(yml)。问题是夹具被推送到DB并且测试实际上是从数据库中检索条目(我认为夹具只是在内存中),并且该值的数据库列类型是整数,而不是字符串,因此领先的零被删除。我真正的问题是我希望该列成为字符串类型表的主键,我没有意识到我创建的迁移没有将列的类型更改为测试数据库中的字符串。