1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】RSpecで使用するコマンドとメソッド

Last updated at Posted at 2025-05-03

記事概要

Ruby on Railsのモデル単体テストについて、まとめる

RSpec

まとめ(コマンド)

rspecコマンド

specディレクトリ以下に書かれたRSpecのテストコードを実行するコマンド

まとめ(テスト整理のメソッド)

describeメソッド

テストコードのグループ分けを行うメソッド
「どの機能に対してのテストを行うか」をdescribeでグループ分けし、その中に各テストコードを記述する

contextメソッド

テストコードのグループ分けを行うメソッド
使用方法はdescribeと同じだが、contextには特定の条件を指定する

itメソッド

テストコードのグループ分けを行うメソッド
describeメソッドに記述した機能において、どのような状況のテストを行うか」を明記する

example

itで分けたグループのこと

まとめ(メソッド)

expectation

検証で得られた挙動が想定通りなのかを確認する構文のこと
雛形は、expect().to matcher()

matcher

「expectの引数」と「想定した挙動」が一致しているかどうかを判断する
どのような挙動を想定しているかを記述する

include

「expectの引数」に「includeの引数」が含まれていることを確認するマッチャ

# 配列の中に'メロン'が含まれていることを想定
expect(['りんご', 'バナナ', 'ぶどう', 'メロン']).to include('メロン')

eq

「expectの引数」と「eqの引数」が等しいことを確認するマッチャ

# 1 + 1という計算の結果が、2と等しいことを想定
expect(1 + 1).to eq(2)

be_valid

valid?メソッドの返り値が、trueであることを期待するマッチャ

expectの引数に指定されたインスタンスがバリデーションでエラーにならない場合、valid?の返り値はtrueとなる

@user = FactoryBot.build(:user)
expect(@user).to be_valid
#=> 「@user.valid?」の結果が"true"の場合、正常完了
#=> 「@user.valid?」の結果が"false"の場合、エラー発生

build

newメソッドと同様の意味を持つ

# FactoryBotを利用しない場合
user = User.new(nickname: 'test', email: 'test@example', password: '000000', password_confirmation: '00000000')

# FactoryBotを利用する場合
user = FactoryBot.build(:user)

before

それぞれのテストコードを実行する前に、セットアップを行うこと

モデル名_spec.rb
require 'rails_helper'
RSpec.describe モデル名, type: :model do
  before do
    # 処理(変数を受け渡す場合、インスタンス変数にする必要がある)
  end

  describe 'X' do
    it 'Y' do
      # before内の処理が完了してから実行される
    end
    it 'Z' do
      # before内の処理が完了してから実行される
    end
  end
end

まとめ(単体テストのメソッド)

valid?メソッド

バリデーションを実行させて、エラーがあるかどうかを判断するメソッド

エラーがない場合はtrueを返す
エラーがある場合はfalseを返し、エラーの内容を示すエラーメッセージを生成する

user.valid?

errors

インスタンスにエラーを示す情報がある場合、その内容を返すメソッド

# 変数userに新規データを格納
[1] pry(main)> user = User.new(nickname: '', email: 'test@example', password: '000000', password_confirmation: '000000')
=> #<User id: nil, email: "test@example", created_at: nil, updated_at: nil, nickname: "">

# 変数userにバリデーションを実行し、エラーがあるかを判断
[2] pry(main)> user.valid?
  User Exists? (0.4ms)  SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'test@example' LIMIT 1
=> false

# エラー情報を表示
[3] pry(main)> user.errors
=> #<ActiveModel::Errors [#<ActiveModel::Error attribute=nickname, type=blank, options={}>]>

full_messages

エラーの内容から、エラーメッセージを配列として取り出すメソッド

# 変数userに新規データを格納
[1] pry(main)> user = User.new(nickname: '', email: 'test@example', password: '000000', password_confirmation: '000000')
=> #<User id: nil, email: "test@example", created_at: nil, updated_at: nil, nickname: "">

# 変数userにバリデーションを実行し、エラーがあるかを判断
[2] pry(main)> user.valid?
  User Exists? (0.5ms)  SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'test@example' LIMIT 1
=> false

# エラーメッセージを表示
[3] pry(main)> user.errors.full_messages
=> ["Nickname can't be blank"]
user_spec.rb
user.valid?
expect(user.errors.full_messages).to include("Nickname can't be blank")

Ruby on Railsまとめ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?