3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails6 のちょい足しな新機能を試す103(ActionDispatch::Response#content_type編)

Last updated at Posted at 2019-11-01

はじめに

Rails 6 に追加された新機能を試す第103段。 今回は、 ActionDispatch::Response#content_type 編です。
Rails 6 では、 content_type は、 Content-Type Header の情報をそのまま返すようになります。

Ruby 2.6.5, Rails 6.0.0, Rails 5.2.3 で確認しました。
また、RSpec のバージョンは、 3.9.0 です。

$ rails --version
Rails 6.0.0

今回は、User CRUD を作り、request spec を変更することにより確認します。

RSpec の導入などについては、 Rails6 のちょい足しな新機能を試す24(unfreeze_time 編) などを参考にしてください。

Rails プロジェクトを作る

$ rails new rails_sandbox
cd rails_sandbox

User の CRUD を作成する

$ bin/rails g scaffold User name

request spec を編集する

spec/requests/users_spec.rb を編集します。

ここで response.content_typeresponse.media_type のテストを追加していることに注意してください。

spec/requests/users_spec.rb
require 'rails_helper'

RSpec.describe "Users", type: :request do
  describe "GET /users" do
    it "works! (now write some real specs)" do
      get users_path
      expect(response.content_type).to eq('text/html; charset=utf-8')
      expect(response.media_type).to eq('text/html')
      expect(response).to have_http_status(200)
    end
  end
end

実際にテストする

実際にテストすると spec が通ることが確認できます。

$ rspec spec/requests/users_spec.rb

Rails 5 では

Rails 5.2.3 では、 content_typetext/html を返すため spec が失敗します。
つまり、以下のように書くと、 spec が通ります。

spec/requests/users_spec.rb
      expect(response.content_type).to eq('text/html')

ちなみに

今回、 request spec に登場した response のクラスは、 ActionDispatch::Response の 派生クラスの ActionDispatch::TestResponse です。
ですが、 content_type メソッドは、 ActionDispatch::Response クラスで実装されています。

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails_sandbox/tree/try103_response_content_type

参考情報

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?