べんきょうのきろく

毎日こつこつ…プログラミング勉強の記録。

勉強の日

10:04開始

ruby on railsって、内容の書き方はよく理解できていても、そこにたどり着くまでの設定とかがよくわかんなかったりする。

でも今日はテストコードを書くまでの準備段階が突然理解できたからそれをまとめておく。

 

<モデル単体のテストコードを書くときの手順>

Gemfile  …group :development, :test do内に追記

gem 'rspec-rails…モデル単体はRSpecでテストコードを書く

gem 'factory_bot_rails…繰り返し記載を避けるために使う

gem 'faker'  …適当な名前やemailやパスワード等を用意してくれる

Ubuntu

bundle install  …①のgemをインストール

ctrl+c   …gemを新しくインストールしたため、再起動してアプリに反映

rails s  

rails g rspec:install  …導入したrspecを使えるようにする

③.rspec

--format documentation  …最終行に追記してテストコードの結果をターミナルで可視化する

Ubuntu

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

Ubuntu 

bundle exec rspec spec/models/モデル名(単)_spec.rb  …テストコード実行して緑文字なら成功

 

今日がくるまでに応用が終わる予定だったんだけど、あと少し終わらず。

2-3日以内に発展に進みたいな。

このまま気分よく進めるようにがんばる!