【rails】テストの重要性(rspec)・model spec

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

テストの重要性

  • テストとは、プログラムが動くことを確認するためのプログラムのこと
  • バグを減らして、ユーザーに安心して使ってもらうことが大事
  • プログラムがしっかり動くことを保証しなくてはいけない

テストの流れ

  1. 確認したいことを決める
  2. ダミーデータを作成する
  3. ダミーデータで「1.確認したいこと」が起こるか確認する


rspecをインストールする

railsでテストを書くために、rspecをインストールする

rspecとは

railsで簡単にテストを実行するための環境を用意してくれるgem

gemfileに追加する

group :development, :test do
  # 中略
  gem 'rspec-rails', '4.0.1'
end

(今回は講義に合わせたバージョンでインストール)

bundle install

rails g rspec:install

インストールしてファイルも作成された

ここまででrspecの設定は完了


Modelのテスト

Modelのテスト(model spec)の流れ

  1. 確認したいことを決める
    今回は、「タイトルと記事があれば保存されるのか」確認したい
  2. ダミーデータ(user、article)を作成する
  3. ダミーデータが保存されるかを確認する


テストはどこに書くのか?

どのmodelのテストを書きたいのか決めて、ターミナルで以下を実行する

rails g rspec:model article

=> create  spec/models/article_spec.rb

articleのところには、テストしたいmodelの名前が入る

require 'rails_helper'

RSpec.describe Article, type: :model do
# ↓のpending〜 は不要なので削除しておく
  pending "add some examples to (or delete) #{__FILE__}"
end

これで準備完了!


実際に書いてみる

1.なにを確認したいか決める

modelクラスでちゃんとデータが保存できるかを確認する

RSpec.describe Article, type: :model do
  it 'タイトルと内容が入力されていれば、記事を保存できる' do
  end
end

itとは”確認したいこと”を確認する


2.ダミーデータを作成する

記事を保存するには、①ユーザーと②記事、2つのダミーデータが必要

適当なuserと、Fakerで適当な記事を作成する

RSpec.describe Article, type: :model do
  it 'タイトルと内容が入力されていれば、記事を保存できる' do
    user = User.create!({
      email: 'test@example.com',
      password: 'password'
    })
    article = user.articles.build({
      title: Faker::Lorem.characters(number: 10),
      content: Faker::Lorem.characters(number: 300)
    })

    expect(article).to be_valid
  end
end

記事が有効であるか確認する
  • expect・・・英語で「期待する」
  • be_valid・・・RSpecで用意されているメソットで、「インスタンスが保存できる状態か確認する」

3.ダミーデータで「確認したいこと」を確認する

ターミナルを開く

bundle exec rspec spec/models/article_spec.rb
  1. bundle exec rspecで、RSpecを実行できる
  2. spec/models/article_spec.rbで、どのテストを実行するのか指定する

実行してみる

この「」が緑→テストが通った赤→テストは失敗という意味

成功したので、「1 example, 0 failures」と表示される

#DAY13