「テストとRSpec」について学習
プログラミングにおけるテストとは?
「プログラムが意図した動作をするかを確かめる」こと。
テストをすることによって、事前にエラーになり得る箇所を発見し修正できたり、
要件の漏れを防止できる。
RSpec
RSpecは、Rubyを元に作成されたテストに特化した言語。
「rspec-rails」
というGemをインストールすると、RSpecを利用できる。
今回はRSpecを使用してテストを実施する流れを学習した。
Railsでテストを行う流れ
[1] Gemをインストール
gem 'rspec-rails'
とweb_console
の部分を追加。
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
※省略
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'rspec-rails', '~> 4.0.0.beta2'
※省略
end
group :development do
gem 'web-console'
※省略
end
必要箇所を記述したらターミナルでbundle install
入力。
[2] RSpecの設定をする
以下のコマンドでRSpec用の設定ファイルを作成。
ターミナル
% rails g rspec:install
以下のような画面になれば成功。
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
このコマンドを入力することでRSpecに必要な2つのファイルが自動で生成される。
・rails_helper.rb
Rails
においてRSpecを利用する際に、共通の設定を書いておくファイルのこと。
各テスト用ファイルでこのファイルを読み込むことで、共通の設定やメソッドを適用できる。
・spec_helper.rb
rails_helper.rbと同じくRSpec用の共通の設定を書いておくファイルだが、こっちはRSpecをRails無し
で利用する際に利用する。
2つのファイルの作成が確認できたら、
アプリディレクトリ内の.rspecファイル内
に以下の記述を追記する。
ruby:--format documentation
このオプションを記述することでRspecで
出力する内容をキレイに表示
することができる。
[3] RSpecが正常に利用できるか確認
ターミナル
bundle exec rspec
以下のような結果になれば、RSpecを利用する準備はできている。
ターミナル
No examples found.
Finished in 0.00031 seconds (files took 0.19956 seconds to load)
0 examples, 0 failures
[4] テストするファイルの作成
[5] factory_botの導入
factory_bot
とは、簡単にダミーのインスタンスを作成することができるGemのこと。
もっと簡潔に説明すると、Rspecで用いるテストデータの作成を楽にしてくれる役割を持つ。
したがって以下を参考にインストールしておくと良い。
group :development, :test do
#省略
gem 'rspec-rails', '~> 4.0.0.beta2'
gem 'factory_bot_rails'
end
⚠rspecと同じグループの中
に追記すること。
必要箇所を記述したらターミナルでbundle install
入力。
[6] テストコードを書く
・テストコードの書き方(例)
以下の記述をもとに解説。(間違っているかもしれません)
①RSpec.describe Message, type: :model do
②describe '#create' do
③context 'can save' do
it 'is valid with content' do
④expect(build(:message, image: nil)).to be_valid
end
it 'is valid with image' do
⑤expect(build(:message, content: nil)).to be_valid
end
it 'is valid with content and image' do
⑥expect(build(:message)).to be_valid
end
end
①の処理
Messageのモデルを対象をテストを行う宣言。
②の処理
Messageクラスのモデルのcreateメソッドが動いた時をテストの対象とする。
③の処理
データが保存できた場合に④〜⑥の条件でテストを行う。
④の処理
Messageモデルでインスタンスを生成し
imageカラムがnull(空)の条件でバリデーションが実行されるか確認
⑤の処理
Messageモデルでインスタンスを生成し
contentカラムがnull(空)の条件でバリデーションが実行されるか確認
⑥の処理
Messageモデルでインスタンスを生成し
全カラムにデータが入っている条件でバリデーションが実行されるか確認
[6] テスト実行する
ターミナル
bundle exec rspec spec/ファイル名/messages_controller_spec.rb
終了!!
********************************************
参考記事
「RSpecの使い分け」
Author And Source
この問題について(「テストとRSpec」について学習), 我々は、より多くの情報をここで見つけました https://qiita.com/teck_shumpei/items/52866da59987e55fec5e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .