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