##はじめに
私はテストコードを書くのが苦手です。特にこれを読めば、「そんなあなたでも大丈夫!テストコードを楽にかける方法が。。。」みたいな記事でもありません。
書くのが苦手な私に、こんなに重要で必要なものだから、書かないといけないんだよ。と再認識させるため、そもそもテストコードとはということをまとめてみました。よろしくお願いします。
テストコード
テストコードとはアプリケーション内に記述するコードで、実装した機能が正しく機能するか自動で確かめてくれるコードです。
例えば、「名前の記入欄が空欄だとエラーがでる」や「メールアドレスが空欄だとエラーが出る」など、考えられる挙動を全て書き出し、そのテストコードを記述していきます。
記述するのは大変ですが、一度記述してしまえば、コマンド一つでそれらの挙動を自動で確かめてくれるのです。
RSpec(アールスペック)
RSpecはRailsアプリケーションのテストコードを書くために用いられるGemです。
Railsには標準でmini_testというテスト用のGemが導入されていますが、RSpecを使うのが主流だそうです。
なぜテストコードを書くのか
私はいつもブラウザで挙動がうまくいっているのかポチポチして確かめていますが、テストコードは書く必要はあります。
もしブラウザポチポチだけで確認を終えてしまうと、どのようなテストを行ったのか、記録が残りません。
また、ブラウザでポチポチしているのは人間なので、人為的ミスが起こったり、抜けがある可能性が高いです。
加えて、仕様に変更があったときは、もう一度全部確認し直さなければなりません。その変更で他の機能にも影響が及んでいる可能性もありますし。。。
しかしテストコードを書いているとそのようなことは起こらないため、アプリケーションのクオリティが担保がされるものと言えます。
テストコードはアプリケーションの挙動を漏れなく確認したり、変更があったときに迅速に対応できたりと、アプリケーションのクオリティが担保できる重要なものなんですね。
テストコードには書くべきパターンというのが二つあります。それが正常系と異常系です。
正常系
このテストは、ユーザーが開発者の意図する操作を行った時の挙動を確認するテストコードです。
例えば「正しく全ての項目が入力されていればログインできる」というのは、開発者が意図した操作で、正常系です。
異常系
こっちが私は記述量が多くて大変だと感じます。
異常系は正常系の逆で、開発者が意図しない操作をユーザーが行った時の挙動を確認するテストコードです。
例えば「パスワードが空欄だった場合、ログインできない」みたいなものです。
続いてテストの種類についてです。
単体テストコード
これはモデルやコントローラーなどの機能ごとに問題がないか確かめるテストコードです。
バリデーションの挙動を確認したりします。先ほどの「パスワードを空欄だった場合、ログインできない」というのはバリデーションがしっかり機能しているか確認している単体テストコードと言えますね。
結合テストコード
これはユーザーがブラウザで操作する一連の流れを再現して、問題ないか確かめます。
例えば、「投稿ボタンを押すと投稿完了ページに移動し、TOPページに戻ると先ほど投稿した内容が表示されている」といった一連の流れを一気に確かめます。これはコマンドを押してテストを実行すると、自動でブラウザが開き、アプリケーションが動き出すので、うおおおおおってなります。笑
RSpecの導入と設定
最後にRSpecの導入方法と設定を残しておきます。よく忘れるので。。。
まずはGemfileにGemを追加します。**gem 'rspec-rails', '~> 4.0.0'**を記述してください
group :development, :test doの中に記述すること気をつけてください。(Gemの動作に制限を持たせるため。)
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
続いてターミナルで下記のコマンドを実行。
% rails g rspec:install
下記のように表示されたら成功
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
続いて、生成された.rspecファイルを開いて下記のように記述します。(2行目を追加)
--require spec_helper
--format documentation
これで設定完了です。
おまけで、もし、例えばUserモデルのテストコードが書きたければ、ターミナルで下記のコマンドを実行して作成します。
% rails g rspec:model user
最後に
オリジナルアプリのテストコードが全くかけておらずこれから取り掛かるのがちょっといやです。
ただテストコードは記述中にバグを見つけられたり、一発でクリアしたりすると気持ちいいので、個人的には取り掛かると結構ハマったりします。