specファイルの基本
以下のように、specファイルは配置します
app
# 省略
spec
L model
L モデル名_spec.rb
L controller
L コントローラー名_spec.rb
ファイル名は、「対応するクラス名_spec.rb」になる。
例えば
user.rb
(モデル)のテスト → user_spec.rb
tweets_controlle
(コントローラー)のテスト →
テストの書き方(モデルとアクションの指定)
userモデルのcreateアクションのテストをする場合。
userモデルに、こんなバリデーションがあったとします。
class User < ApplicationRecord
validates :name, presence: true
end
この時、「nameが空欄だったらuserを作れない」ことをテストしようと思います。
まず、外側の書き方はこんな感じです。
require 'rails_helper'
describe User do
describe '#create' do
it 'is invalid without a name' do
#ここにテストの内容を書きます
end
end
end
userモデルのテストなので、クラス名は「User」
createアクションのテストなので、慣習的に「'#create']と書きます。
it~do
の間には何のテストなのかを書きます。
ここは日本語でもOKです。
テストの書き方(テスト内容の指定)
次に、テストの内容を書いていきます。
describe User do
describe '#create' do
it 'is invalid without a name' do
user = User.new(name: "", email: "test@email.com", password: "11111111", password_confirmation: "11111111")
user.valid?
expect(user.errors[:name]).to include("を入力してください")
end
end
end
user = User.new()
の部分で、今回テストするユーザーのインスタンスを生成しています。
user.valid?
の「valid?」は、ActiveRecord::Baseを継承しているクラスのインスタンスを保存する際に「バリデーションにより保存ができない状態であるか」を確かめるためのメソッドです。
expect(user.errors[:name]).to ないの user.errors[:name
で :name カラムに対するエラーメッセージを呼び出しています。(エラーメッセージはrails側で定義されています)。
そして、そのエラーメッセージに "を入力してください" が含まれているのかをテストしています。
・・・なんだかいろいろ難しいので、もう少し練習して慣れようと思います。
次は、次は、factory botを使って、ダミーデータを用意する手順について書こうと思います。