Rspecでコントローラーのテストを行う場合、どのようなテストが必要でしょうか。
この記事に簡単にまとめておきます。
これからRspecを使用してテストコードを書いてみようとしている方、Ruby on Railsを勉強している方などの参考になれば幸いです。
目次
Rspecを使用してコントローラーをテストする
テストしたい内容
def index
@user = User.new(flash[:user])
end
controllerファイルにこのようなindexアクションの記述があったとしましょう。
この時に、テストしたい内容としては以下になります。
- レスポンスコードとして200を返すこと
- newテンプレートをレンダリングすること
- 新しいUserオブジェクトがテンプレートへ渡されること
以上のようなことがテストしたいこととして上げられます。
それでは、これらをテストコードで書いてみましょう。
実際のテストコード
RSpec.describe UsersController, type: :controller do
describe 'GET #new' do
before { get :new }
it 'レスポンスコードが200であること' do
expect(response).to have_http_status(:ok)
end
it 'newテンプレートをレンダリングすること' do
expect(response).to render_template :new
end
it 'レスポンスコードが200であること' do
expect(assigns(:user)).to be_a_new User
end
end
end
こんな感じでテストコードを書くことができます。
ちなみに
この記事で書いたテストコードはrails-controller-testingというgemを導入したことにより使用できるマッチャーが記載されています。気になる方は、ご自身で調べてください。