Как я могу "проверить", является ли кодировка ответа utf-8 в приложении sinatra с использованием rspec? - PullRequest
1 голос
/ 05 февраля 2012

Я использую

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

Но encoding не возвращает строку.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2012

У вас есть две кодировки, чтобы позаботиться:

  • кодировка ответа , объявленная в заголовке Content-Type,
  • кодировка, в которой 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.

1 голос
/ 05 февраля 2012

Я сделал это так (любое другое решение будет высоко ценится):

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