テストコードを書く前の準備(Rpecの導入手順の備忘録)
1.Rspecを使用するためのGemを導入ついでにFactorBotとFakerも導入しておく
ruby.Gemfile
group :development, :test do
#省略
gem 'rspec-rails'
gem 'factory_bot_rails'
gem 'faker'
end
bundle install
を実行
余談:bandle install時に出る警告文を消すのにgem 'net-http'
も一緒に記述する
2.アプリケーション内でコマンドを実行し、Rspecを導入
ruby.ターミナル
% rails g rspec:install
コマンド実行によって以下のようにディレクトリやファイルが生成される
ruby.ターミナル
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
3.テストコードの結果をターミナル上で可視化するための設定をする
ruby.rspec
--require spec_helper
--format documentation #追記
また、エラーメッセージを英語で出力したいときは以下の設定を行う。
spec.rails_helper.rb
#中略
I18n.locale = "en"
# RSpec.configure do |config| 〜 end の外に記載しましょう。
RSpec.configure do |config|
# 中略
end
4.画像投稿のテストをするためのダミー画像を用意する
5.コマンドを実行してテストコードを記述するファイルを生成する
ruby.ターミナル
rails g rspec:model モデル名(モデル名は単数形)
以下のように表示されていればファイルは生成されている
ruby.ターミナル
create spec/models/モデル名_spec.rb
6.FactoryBotを使用してインスタンス生成を共通化しておく
下記はユーザー登録時のユーザー情報のインスタンス生成のFactoryBotの記述例ruby.factories/users.rb
FactoryBot.define do
factory :user do
nickname {Faker::Name.initials(number: 2)}
email {Faker::Internet.free_email}
password {Faker::Internet.password(min_length: 6)}
password_confirmation {password}
end
end
パスワードで英数字混合のものをランダムに含めたいときは以下のように記述するとよいらしい。
password { Faker::Lorem.characters(number: 6, min_alpha: 1, min_numeric: 1) }
上記の指定は
指定 | 指定内容 |
---|---|
number: 6 | ランダムな文字6文字を生成 |
min_alpha: 1 | 最低1文字以上はアルファベット |
min_numeric:1 | 最低1文字以上は数字 |
参考記事:https://qiita.com/takuo_maeda/items/70a3fb2cc190099f3a5e
ついでに誕生日を生成する時
birth_date { Faker::Date.birthday(min_age: 18, max_age: 65) }
7.テストコードファイルにFactoryBotを使用してインスタンスを生成するための記述の準備
FactoryBotの記述例↓
spec/factories/users.rb
FactoryBot.define do
factory :user do
nickname {'test'}
email {'test@example'}
password {'000000'}
password_confirmation {password}
end
end
ruby.spec/models/user_spec.rb
RSpec.describe User, type: :model do
# 以下追記
befor do
@user = FactoryBot.build(:user)
end
ここまでがテストコードを書く前に準備すること。