どこで指定してんだろ、と思って調べてみたメモ
環境
$ bin/rails -v Rails 5.2.2
概要
RSpecなどのテストにおいて、xxx_urlで生成されるurlのホスト名は www.example.com
になる
例
たとえば自分のURLを生成してJSONとして返すコントローラーを作るとする
class UsersController < ApplicationController def index render json: {url: users_url} end end
routes.rbはこんな感じ
Rails.application.routes.draw do resources :users, only: :index end
これに対してrspecを書くと、以下のように書くとコケる
require 'rails_helper' RSpec.describe "/users/", type: :request do subject { get users_path} context "正しくアクセスしたとき" do before do subject end it "期待した結果が返ってくる" do url = JSON.parse(response.body)["url"] expect(url).to eq("http://hoge.com/users") end end end
このrspecを実行すると、以下のように結果が返ってきてドメイン名が固定で割り振られていることがわかる。
$ bundle exec rspec spec/request/user_spec.rb F Failures: 1) /users/ 正しくアクセスしたとき 期待した結果が返ってくる Failure/Error: expect(url).to eq("http://hoge.com/users") expected: "http://hoge.com/users" got: "http://www.example.com/users" (compared using ==) # ./spec/request/user_spec.rb:13:in `block (3 levels) in <top (required)>' Finished in 0.07468 seconds (files took 2.93 seconds to load) 1 example, 1 failure Failed examples: rspec ./spec/request/user_spec.rb:11 # /users/ 正しくアクセスしたとき 期待した結果が返ってくる
結果にもあるように何も指定しないと www.example.com
になる
どこでやっているのか
rails/actionpack/lib/action_dispatch/testing/integration.rb
でテストのセッションの設定をしておりここらへんでやっている模様
class Session DEFAULT_HOST = "www.example.com"