【rails】テストの重要性(rspec)・model spec
テストの重要性
- テストとは、プログラムが動くことを確認するためのプログラムのこと
- バグを減らして、ユーザーに安心して使ってもらうことが大事
- プログラムがしっかり動くことを保証しなくてはいけない
テストの流れ
- 確認したいことを決める
- ダミーデータを作成する
- ダミーデータで「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)の流れ
- 確認したいことを決める
今回は、「タイトルと記事があれば保存されるのか」確認したい - ダミーデータ(user、article)を作成する
- ダミーデータが保存されるかを確認する
テストはどこに書くのか?
どの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
bundle exec rspecで、RSpecを実行できるspec/models/article_spec.rbで、どのテストを実行するのか指定する
実行してみる

この「・」が緑→テストが通った、赤→テストは失敗という意味
成功したので、「1 example, 0 failures」と表示される
#DAY13