Rails Rspecによるmodelの単体テスト

使用するgem

gem 'rspec-rails', '~> 4.0.0.beta2'

gem 'factory_bot_rails'

まずはbundle install

rspec用にターミナルにて以下のコマンドを実行

rails g rspec:install

.rspecファイルに以下の記述を追加

--format documentation

続いてfactory_bot用にfactoriesフォルダを手動で作成(app/specの下) 

上記で作成したフォルダ内に〇〇.rbファイルを作成(〇〇にはデータを作成するモデル名を複数形で記述 例)users.rb )

上記で作成したファイル内に以下のようにテストを行う基本データを記述する

FactoryBot.define do
 factory :user do
   nickname              {"abe"}
   email                 {"kkk@gmail.com"}
   password              {"00000000"}
   password_confirmation {"00000000"}
 end
end

テストに「FactoryBot」の記述を省くために、spec/rails_helper.rbに以下の記述を追加

#省略
RSpec.configure do |config|
 #下記の記述を追加
 config.include FactoryBot::Syntax::Methods
 #省略
end

specフォルダ内にmodelsフォルダを作成

上記で作成したmodelsフォルダにテストを記述するファイルを作成する 例)user_spec.rb

spec/models/user_spec.rbの1行目に以下の記述をする

require 'rails_helper'

これで準備は完了。

テストはspec/models/user_spec.rbに記述する

大枠として以下をまず記述する

RSpec.describe User, type: :model do

end

上記の中にテストを書いていく

例)全てが問題なく通るテスト↓

it 'ニックネーム、メーアドレス、パスワード、パスワード(確認用)がある場合、有効である' do 
   user = build(:user)
   expect(user).to be_valid
 end

例)一部変えるとちゃんと引っかかるテスト↓

it 'ニックネームがない場合、無効である' do
   user = build(:user, nickname: "")
   user.valid?
   expect(user.errors[:nickname]).to include("を入力してください")
 end

テストを実行する際はターミナルにて以下を記述

bundle exec rspec




この記事が気に入ったらサポートをしてみませんか?