コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

rspecでRailsのroute.rbに書いたredirectを検証する

書き方よくわからんと思ったのでメモ

環境

$ bundle exec rspec --version
RSpec 3.8
  - rspec-core 3.8.0
  - rspec-expectations 3.8.2
  - rspec-mocks 3.8.0
  - rspec-rails 3.8.1
  - rspec-support 3.8.0

やり方

request specで

expect(response).to redirect_to("{{リダイレクト先のフルパス}}")

のように書くことで確認ができる

書き方例

前提

こんなControllerがあり

class UsersController < ApplicationController
  def index
    render json: {url: users_url}
  end
end

こんなroute.rbでリダイレクトさせる場合

Rails.application.routes.draw do
  resources :users, only: :index
  # same_usersはusersにリダイレクト
  get "same_users" => redirect("/users")
end

rspec側の書き方

下記のような感じで書けばOK

require 'rails_helper'

RSpec.describe "/same_users/", type: :request do
  subject { get "/same_users/"}
  context "正しくアクセスしたとき" do

    before do
      subject
    end

    it "期待した結果が返ってくる" do
      expect(response).to redirect_to("http://www.example.com/users")
    end
  end
end

参考URL