ruby - 如果在使用 rspec 的 sinatra 应用程序中响应字符集是 utf-8,我怎么能得到 "test"?

标签 ruby encoding utf-8 rspec httpresponse

我用

before do
  content_type "text/html", :charset => "utf-8"
end

在我的 sinatra 应用中。

如何检查这是否适用于我的 rspec 测试?
我认为它应该是这样的:

it "should be utf-8 encoded" do
  get '/'
  last_response.body.encoding.should == 'utf-8'
end

但是编码不返回字符串。

最佳答案

你有两种编码需要注意:

  • Content-Type header 中声明的响应编码,
  • Ruby 将响应主体存储在 last_reponse.body 对象中的编码。

一个好的 Rack 应用程序应该确保两者保持同步并且彼此一致,但是某些中间件组件或编码错误可能会使它们不匹配。所以你必须测试两者。

此测试将确保正文字符串以“UTF-8”编码。

it "should be UTF-8 encoded" do
    get '/'
    last_response.body.encoding.name.should == 'UTF-8'
end

这里我们正在测试如何将正文字符串编码为 Ruby 对象。

(请注意,此代码仅适用于 Ruby 1.9.x。)

相反,如果您想测试服务器是否为正文声明了 UTF-8 内容类型,您应该使用

it "should have UTF-8 content type" do
    get '/'
    last_response.content_type.should =~ /UTF-8/
end

在第二个测试中,我们检查服务器是否声明它正在使用 UTF-8 编码,将 Content-Type header 设置为包含 UTF-8 的内容。

关于ruby - 如果在使用 rspec 的 sinatra 应用程序中响应字符集是 utf-8,我怎么能得到 "test"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144785/

相关文章:

java - 如何获取列表中字符串的索引

javascript - 什么是将事物分类为类型的良好 JavaScript 模式?

ruby-on-rails - 使用 Instagram gem 获取所有用户的图片

ruby-on-rails - 序列化程序中的 ENOENT 错误

python - pyodbc 无法正确处理 unicode 数据

Java Map,如何正确将UTF-8字符串放入 map ?

php - 定位mysql数据库中不可见的utf8字符

ios - 为什么 iPhone 图像的方向错误?

encoding - jpeg哈夫曼编码程序

java - URISyntaxException 的疯狂行为