LoginSignup
16
7

More than 3 years have passed since last update.

RSpec の request テストで response.status が 403 になった

Last updated at Posted at 2020-04-14

概要

Docker に構築した Rails 6 で、 RSpec の request テストを実行したら、 response.status が 403 になりテストコードが通らなくなりました。
解決に半日以上使ってしまったので、原因と解決方法を残します。

環境

Rails 6.0.2
Docker

RSpec の実行方法

docker run --rm -v /hege/app:/app rails_app bundle exec rspec spec/requests

出ていたエラー

Blocked host: www.example.com
To allow requests to www.example.com, add the following to your environment configuration

テストコード内で p response を実行して確認しました。

原因

Rails6 で追加された DNS リバインディング攻撃防止機能
RSpec でテストを実行すると www.example.com というホスト名でテストが実行されます。
www.example.com が登録されていないホスト名だった為にブロックされたようです。

解決方法

アクセスを許可するドメインを Rails.application.config.hosts に追加します。
config/application.rb に、ドメインを追加しました。

module XXXXX
  class Application < Rails::Application
    # 略
    config.hosts << '.example.com'
  end
end

最後に

Rails 6 で ホスト名を指定していないとエラーになる事は知っていたのですが、 RSpec でも同様にエラーになるとは思ってもいませんでした。
最初はパーミッションの問題だと思いこみ、全然違う所を見ていました。
response を出力して読んでいれば半日も潰れる事はなかったです。
Rails からのメッセージをちゃんと読むべきでした。

16
7
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
16
7