RSpecを使ってコントローラで簡単にテストやってみた
参考にした記事
使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 - Qiita
RailsじゃないRspec3環境を構築する方法 - Qiita
初期化
Gemをinstall & 初期化する
- Gemfileにrspecを追加
group :development, :test do gem "rspec-rails" end
- 初期化
bundle exec rails generate rspec:install
rspec自体を初期化
以下の記事を参考に。
RailsじゃないRspec3環境を構築する方法 - Qiita
テスト用のファイルを作成する
初めてRSpecでRailsアプリのコントローラーをテストする - Qiita
rails g rspec:controller books
- 上のコマンドを打つことで、specフォルダ内にcontrollersフォルダが作成され、 その中に、books_controller_spec.rbが作成されます。
テストを書いてみる
テスト対象のcontoroller
def index @books = Book.where(is_readed: params[:is_readed]).where(uid: params[:uid]).where(test: params[:uid]) render json: @books, status: :ok end
- whereでデータを取ってくるだけのシンプルな処理です
テストを書いてみる
以下の記事を参考にAPIのステータスコードで判断する簡単なテストを書いてみました。
spec/controllers/books_controller_spec.rb
require 'rails_helper' RSpec.describe BooksController, type: :controller do describe "#index" do # 正常なレスポンスか? it "responds successfully" do get :index, params: {is_readed: false, uid: 'XXXXX'} expect(response.status).to eq(200) end end end
解説
get :index, params: {is_readed: false, uid: 'XXXXX'}
get
でindex
メソッドを呼び出し、is_readed: false, uid: 'XXXXX'
をparamsに入れている
expect(response.status).to eq(200)
response
には上記のメソッドで返ってきたレスポンスが入っている。今回はステータスを取り出しているeq(200)
で取り出したステータスが200か確認
実行してみる
docker-compose run web rspec
テスト成功パターン
テスト失敗パターン
失敗するとこんな風に失敗した箇所が表示される
感想
これまでテストってどんなものか記事をみてふーんとか思ってたけど、やってみるのが一番感覚掴めて良いと思った。
あと、ステータスコードレベルでのテストなら、そんなに手間は掛からないんだな〜と思った。
もちろんその分効果は薄いし、もう少し細かくやると色々と手間が増えるんだろうけど。