プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】「Model Spec(モデルスペック)」の基本
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】「Model Spec(モデルスペック)」の基本

12.30

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

Model Specは何をテストするのか。

主にビジネスロジック等を記載したモデルクラス内のメソッドの動作を検証します。

Model Specを利用するための準備

モデルのテストを作成するための下記コマンドを実行しましょう。

1
rails g rspec:model モデル名

Dockerを使用している場合は下記のようなコマンドになるでしょう。

1
docker-compose exec Railsのコンテナ名 bundle exec rails g rspec:model モデル名

「spec/models/モデル名_spec.rb」というファイルが生成されるのでこれがModel Specのテストを記述するためのファイルになります。

基本的な書き方

1
2
3
4
5
6
7
8
9
10
11
RSpec.describe User, type: :model do
  describe 'テストの対象を記載、「#メソッド名」とすることが多い(例:#age)' do
    context 'テストの条件を記載(例:3年後の生年月日の場合)' do
      let(:user) { User.new(birthday: Time.zone.now + 3.years) }
 
      it 'メソッドの結果がどうであれば正しいか記載する(例:年齢が3歳であること)' do
        expect(user.age).to eq 3
      end
    end
  end
end

バリデーションのテスト

1
2
3
4
5
6
let(:user) { User.new(name: nil) }
 
it '名前が空欄になっている場合のバリデーションテスト' do
  user.valid?
  expect(user.errors[:name]).to include("can't be blank")
end

valid?メソッドでモデルの有効性を検証できます。

アソシエーションのテスト

1
2
3
4
5
context 'customerモデルとの関係' do
  it 'UserとCustomerモデルがN:1となっている' do
    expect(Customer.reflect_on_association(:user).macro).to eq :belongs_to
  end
end

まとめ

他にもクラスメソッドのテストなどを始め様々なテストがありキリがないと思いますのでまずは優先度が高いケースから記述するなど工夫しましょう。

スポンサーリンク
  • 2019 12.30
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 06.20

    【Ruby on Rails】レイアウトの共通デザインを定義する。

  2. 2019 12.01

    【Rspec】基本的な書き方、タグなど

  3. 2020 01.10

    【Ruby on Rails】「cancancan」について

  4. 2018 06.17

    【Ruby on Rails】概要(他言語への影響、環境別構成例、テストフレームワーク)

  5. 2020 11.17

    【Ruby on Rails】「Enum」について

  6. 2019 12.08

    【Ruby on Rails】「seedデータ」、「faker」

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Ruby on Rails】「bcrypt」によるロ…

【Rspec】「Controller Spec(コント…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー