🌵
テストコードの記述に最低限必要な情報
背景
テストコードを記述する際に、いつも情報を忘れてWebの資料探して、
っという感じだったので自分の知識定着も兼ねて、
最低限必要な準備と、利用するコマンド、最低限のテストコードをまとめました。
1.事前準備
1-1.gemの追加
group :development, :test do
中略
gem 'rspec-rails', '~> 4.0.0'
gem 'factory_bot_rails'
gem 'faker'
end
💡 gemを記述後「bundle install」を実施
💡 factory_botは事前にインスタンスの雛形を作成して、テストコードで利用するgem
💡 fakerはランダムな値を生成するgem
1-2.RSpecの設定
①rspecのinstall
rails g rspec:install
②.rspecに設定を記述
--format documentation
💡 上記を追記する事で、ターミナルでテストコードの結果が確認できるようになる
2.テストコードで利用するコマンド
rails g rspec:model モデル名
💡 テストコードを記述するファイルと、FactoryBotを記述する以下ファイルが作成される
create spec/models/モデル名_spec.rb
create spec/factories/モデル名の複数形.rb
bundle exec rspec spec/models/モデル名_spec.rb
💡 モデル名_spec.rbに記述したテストコードを実行するコマンド
3.単体テストの参考コード
テストコードで利用するメソッド
No | 関数 | 用途 | 利用例 |
---|---|---|---|
1 | describe | どの機能に対してのテストか | ユーザー新規登録 |
6 | context | どのような条件のテストか (正常系/異常系) |
正常系:新規登録できる 異常系:新規登録できない |
2 | it | どのような状況のテストか | nicknameが空では登録できない |
3 | valid? | validationを実行する | モデル名.valid? |
4 | errors | valid?実行時にエラーの内容を全て返す (エラーがあれば) |
モデル名.errors |
5 | full_messages | errorsに含まれるエラーメッセージを返す | モデル名.errors.full_messages |
参考FactoryBot
/spec/factories/users.rb
FactoryBot.define do
factory :user do
email {Faker::Internet.free_email}
password {Faker::Lorem.characters(number: 6, min_alpha: 1, min_numeric: 1) }
password_confirmation {password}
end
end
参考テストコード
/spec/models/user_spec.rb
require 'rails_helper'
RSpec.describe User, type: :model do
#beforeでFactoryBotで作成した情報をインスタンス変数に代入する
before do
@user = FactoryBot.build(:user)
end
describe 'ユーザー新規登録' do
#正常系テスト
context 'ユーザー登録ができる' do
it '全ての情報が正しく入力され、ユーザー登録ができる' do
expect(@user).to be_valid
end
end
#異常系テスト
context 'ユーザー登録ができない' do
it 'emailが空で登録できない' do
@user.email = ''
@user.valid?
expect(@user.errors.full_messages).to include "エラーメッセージの内容"
end
end
end
end
Discussion