勉強の日
10:04開始
ruby on railsって、内容の書き方はよく理解できていても、そこにたどり着くまでの設定とかがよくわかんなかったりする。
でも今日はテストコードを書くまでの準備段階が突然理解できたからそれをまとめておく。
<モデル単体のテストコードを書くときの手順>
①Gemfile …group :development, :test do内に追記
gem 'rspec-rails' …モデル単体はRSpecでテストコードを書く
gem 'factory_bot_rails' …繰り返し記載を避けるために使う
gem 'faker' …適当な名前やemailやパスワード等を用意してくれる
bundle install …①のgemをインストール
ctrl+c …gemを新しくインストールしたため、再起動してアプリに反映
rails s
rails g rspec:install …導入したrspecを使えるようにする
③.rspec
--format documentation …最終行に追記してテストコードの結果をターミナルで可視化する
rails g rspec:model モデル名(単) …spec/factories/モデル名(複).rb(⑤)とspec/models/モデル名(単)_spec.rb(⑦)を同時に作成
⑤spec/factories/モデル名(複).rb
FactoryBot.define do
factory :モデル名(単) do
Fackerを使ったテスト用データを書き込む
例:name {Faker::Name.last_name}
例:email {Faker::Internet.free_email}
例:password {Faker::Internet.password(min_length: 6)} ※バリデーションも付けられる
end
end
⑥テストコードのexample整理
⑦spec/models/モデル名(単)_spec.rb …⑥で整理したexampleを書いてテストコード記述
require 'rails_helper'
RSpec.describe モデル名(単), type: :model do
before do
インスタンス変数を設定して⑤の内容を呼び出す
例:@post = FactoryBot.build(:post)
end
describe 'タイトル' do
context '●●できる場合' do
it '●●が存在していれば保存できる' do
テストコード書く
(⑤の内容を使って、上手くいくよーなコードを書く)
例:expect(@post).to be_valid
end
end
context '●●できない場合' do
it '●●が空では保存できない' do
テストコード書く
(⑤の内容をダメな状態に再設定して、その状態だとどんなエラーになるかを書く)
例:@post.title = ''
例:@post.valid?
例:expect(@post.errors.full_messages).to include("Title can't be blank")
end
end
end
end
bundle exec rspec spec/models/モデル名(単)_spec.rb …テストコード実行して緑文字なら成功
今日がくるまでに応用が終わる予定だったんだけど、あと少し終わらず。
2-3日以内に発展に進みたいな。
このまま気分よく進めるようにがんばる!