1

我正在尝试在 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 开头的值视为八进制值,因此添加引号应该足以将其视为字符串但不起作用。我也尝试过管道“|” 签名,但也不起作用。知道为什么吗?

4

2 回答 2

1

快速回答 (TL;DR)

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

语境

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

问题

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

解决方案

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

陷阱

  • 数据库或编程语言上下文的数据类型转换可以将字符串标量转换为数字标量值。
于 2017-03-08T15:22:39.640 回答
0

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

于 2013-05-31T16:34:45.387 回答