无效字节序列的简单单元测试失败(构建测试的正确方法是什么?)

时间:2014-12-15 16:43:46

标签: ruby-on-rails unit-testing utf-8

我正在编写一个简单的单元测试,它应该使用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的指南,但没有遇到预期的结果。有人可以指出我做错了什么。非常感谢。

1 个答案:

答案 0 :(得分:0)

这是Yaml的问题,以及它解释字符串文字的方式。它似乎不允许构造\255。由于Yaml需要UTF-8,因此可能无法在Yaml文档中插入无效的UTF-8字符。

我建议只在测试中设置参数。即。

edit.value = "This is a string with invalid byte sequence\255"

此外,IMO工厂是一种比固定装置更好的生成测试数据的方法。