我正在编写一个简单的单元测试,它应该使用Rails after_find回调将数据库中的值从ASCII转换为UTF8。这是我简单的测试代码:
def test_convert_edit_value_into_utf8
edit = edits(:edit_with_invalid_byte_sequence)
assert_equal "This is a string with invalid byte sequence", edit
end
仅供参考我也尝试过这种变化进行测试。 def test_convert_edit_value_into_utf8 edit = edits(:edit_with_invalid_byte_sequence) assert_equal"这是一个包含无效字节序列的字符串",edit 端
在我的灯具文件中,正在为上述测试提取此条目(如下所示):
edit_with_invalid_byte_sequence:
id: 8
type: PropertyEdit
target_id: 1
target_type: Project
key: description
value: "This is a string with invalid byte sequence\255"
account_id: 1
如您所见,我在edit_with_invalid_byte_sequence的值行上插入了无效的字节序列。我已经纠正了这个问题的after_find方法,但是当我运行测试时,我收到了这个错误。
Psych::SyntaxError: (<unknown>): found unknown escape character while parsing a quoted scalar at line 61 column 10
错误是指上述edit_with_invalid_byte_sequence的值行。
我没有得到的是当Rails无法加载此错误以进行纠正时,我应该如何测试无效的字节序列。我故意想要这个无效的字节序列,以便下面的代码修复它。
def after_find
value.fix_encoding_if_invalid! if value
end
我如何解决这个问题,我在遵循Thoughtbot Thoughbot UTF8 byte testing的指南,但没有遇到预期的结果。有人可以指出我做错了什么。非常感谢。
答案 0 :(得分:0)
这是Yaml的问题,以及它解释字符串文字的方式。它似乎不允许构造\255
。由于Yaml需要UTF-8,因此可能无法在Yaml文档中插入无效的UTF-8字符。
我建议只在测试中设置参数。即。
edit.value = "This is a string with invalid byte sequence\255"
此外,IMO工厂是一种比固定装置更好的生成测试数据的方法。