2012-02-04 38 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 
相關問題