我用
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/