ruby-on-rails - 您将如何为 `Iconv.new("UTF8//IGNORE", ...)` 习语编写测试?

标签 ruby-on-rails ruby character-encoding ruby-on-rails-3.2

这个 Iconv 习惯用法将字符串转码为 UTF-8 并删除无法音译的字符:

require "iconv"

def normalize(text)
  Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv(text.dup)
end

您实际上将如何为此编写测试?

编辑:我最终简化了问题,因为我意识到尝试在 Rails # encoding: utf-8 spec 文件中测试这个的上下文使问题复杂化。所以现在赏金有点傻,但如果有人能展示我可以完成的测试,我还是会奖励它。

最佳答案

您可以使用 #pack 从字节数组构造字符串方法。这样,您可以轻松生成无效/错误的字符串并在测试中使用它。

例子:

describe "#normalize" do
  it "should remove/ignore invalid characters" do
    # this "string" equals "Mandados de busca do caso Megaupload considerados inv\xE1lidos - Tecnologia - Sol"
    bad_string = [77, 97, 110, 100, 97, 100, 111, 115, 32, 100, 101, 32, 98, 117, 115, 99, 97, 32, 100, 111, 32, 99, 97, 115, 111, 32, 77, 101, 103, 97, 117, 112, 108, 111, 97, 100, 32, 99, 111, 110, 115, 105, 100, 101, 114, 97, 100, 111, 115, 32, 105, 110, 118, 225, 108, 105, 100, 111, 115, 32, 45, 32, 84, 101, 99, 110, 111, 108, 111, 103, 105, 97, 32, 45, 32, 83, 111, 108].pack('c*').force_encoding('UTF-8')

    normalize(bad_string).should == 'Mandados de busca do caso Megaupload considerados invlidos - Tecnologia - Sol'
  end
end

(很抱歉测试字符串太长了,我只是在我的代码中找不到更短的例子)

关于ruby-on-rails - 您将如何为 `Iconv.new("UTF8//IGNORE", ...)` 习语编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823453/

相关文章:

ruby-on-rails - authlogic - session 创建失败的原因并且没有错误消息(使用 formtastic)

html - unicode字符是什么 代表?

ruby-on-rails - Ruby on Rails - ElasticSearch 结果窗口太大

ruby-on-rails - Capistrano 没有正确重启 Mongrel 集群

ruby-on-rails - 保存后回形针重命名文件

ruby-on-rails - rails 康康角色?

mysql - MySQL 中的 utf8mb4 和 utf8 字符集有什么区别?

python - 使用 latin1 字符集对表中的 UTF8 数据进行编码

javascript - Summernote 编辑器不支持嵌套表单

ruby-on-rails - Rails 路径助手在 js.coffee.erb 中不起作用