2012-02-04 108 views

回答

3

你有两种编码照顾:

  • 在声明响应的编码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头设置的东西,包含UTF-8

+0

谢谢,你会解释第二个代码片段吗? – Ali 2012-02-05 00:19:45

1

我做到了像这样(没有其他解决办法,将不胜感激):

it "should be utf-8 encoded" do 
    get '/' 
    last_response.body.encoding.name.should == "UTF-8" 
end 
相关问题