はじめに
オリアプ作成も遂に終盤に差し掛かり、今日からテストコードを書くフェーズに突入します。
テストコードを書く前に今まで学んだテストコードの知識を今日から少しずつアウトプットしていきたいと思います!
※プログラミング初学者の私がアウトプットとこれから学習される皆様の参考になればと思い投稿しています。また、マークダウン記法も不慣れな初学者ですので、間違い等があれば指摘いただけると幸いです。
この記事を見てできるようになること
Ruby on Railsのgemであるrspec-railsを使用して、テストコードを実装できるようになります!
Rspecとは?
Ruby on Railsのアプリケーションのテストコードを便利に実装できるGemです。
テストコードを書く意義
テストコードとはアプリケーション内に記述する、そのアプリケーションの挙動を確認するコードのことを言います。
なぜ、このコードを書かなければならないのでしょうか?メリット・デメリットに分けて考えてみましょう!
テストコードを書くメリット
①クオリティの担保
ブラウザでアプリケーションの挙動を確認することは、デメリットが多いから。
②使用の見極め
テストコードが書ける=そのアプリケーションの仕様を理解している。ということになるから。
手動で挙動確認するデメリット
①人為的なミスが生じる可能性がある。
②仕様が変わった時に、もう一度手動で確認する必要がある。
③どこをテストしたか記録が残らない。
テストコードを書くべきパターン
アプリケーションの挙動を確認するときは「うまくいくとき」(正常系)と「うまくいかないとき」(異常系)に分けられます。
正常系
「ユーザーが情報を正しく入力してログインする。」のように開発者の意図する操作を行った時の挙動を確認するテストコード。
異常系
「ユーザーが情報を間違えて入力したためログインできない。」のようにユーザーが開発者の意図しない操作を行った時の挙動を確認するテストコード。
テストコードの種類
テストコードの種類は大きく以下の2つに分けられます。
単体テストコード
モデルやコントローラーなど、機能ごとに問題がないか確かめる。
結合テストコード
ユーザーがブラウザで操作する一連の流れを再現して、問題がないか確かめる。
以上のようなメリット・デメリット、テストコードの書くべきパターンと種類を記述しましたが、初めて読んだという方は、ここで100%意味が分からなくても大丈夫です!実際に今、分からなくても書いた後に必要性が分かります。今言えることはとにかく書こう!書いたら分かる!ということです。
テストコードのRSpecの導入と設定
まずはRspecのインストール
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'rspec-rails', '~> 4.0.0' #追記
end
忘れずにbundle install
を実行。
% bundle install
続いて設定ファイルを作成します。以下コマンドを実行します。
% rails g rspec:install
すると、いくつかのディレクトリとファイルが生成されます。
このコマンドで生成されたファイルのうち.rspecファイルを開き、以下のように記述します。
テストコードの結果をターミナル上に可視化するための記述です。
--require spec_helper
--format documentation # 追記
これでRSpecの導入と設定は完了です!
Userモデルの単体テストコード(準備)
ここからはUserモデルを例に挙げてテストコードを書く準備を行います。
以下のコマンドを実行してください。
rails g rspec:model user
このコマンドにより、以下のファイルが生成されます。
require 'rails_helper'
RSpec.describe User, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end
このファイルにテストコードを記述していきます。
ちなみに!
1行目のrails_helperはRspecを用いてRailsの機能をテストするときに、共通の設定を書いておくファイルです。各テスト用ファイルでspec/rails_helper.rbを読み込むことで、共通の設定やメソッドを適用します。
rails gコマンドでテストファイルを生成すると、rails_helperを読み込む記述が、自動的追加されます。
終わりに
今日はここまで。
次回はテストコードを実装してきます!
↓続き