はじめに
メモ用に記録しています。
特に何かを参考したわけではありませんので、間違いはご指摘いただけると幸いです。
テストコード実行コマンド
bundle exec rspec テストするファイル名 ←# spec/から記述
FactoryBot.define do
factory :order do
price { 3000 }
end
end
require 'rails_helper'
RSpec.describe Order, type: :model do
before do
@order = FactoryBot.build(:order)
end
describe '購入情報のデータの保存' do
context '成功' do
it "priceがあれば保存ができること" do
expect(@order).to be_valid
end
end
context '失敗' do
it "priceが空では保存ができないこと" do
@order.price = nil
@order.valid?
expect(@order.errors.full_messages).to include("Price can't be blank")
end
end
end
end
基本用法
FactoryBotのインスタンスが正しく生成されているか?
インスタンス変数に代入されているか?
を確認します。
RSpec.describe Order, type: :model do
before do
@order = FactoryBot.build(:order)
binding.pry ←
end
price: 3000
という値が@orderに含まれていることがわかりました。
FactoryBotのインスタンス生成は成功です。
インスタンス変数に値は入っているか?
バリデーションを通してエラーがあるかどうか?
を確認します。
describe '購入情報のデータの保存' do
context '成功' do
it "priceがあれば保存ができること" do
expect(@order).to be_valid
binding.pry ←
end
end
@order.valid? の結果が trueとなっています。
「priceがあれば保存ができること」というテストは成功です。
インスタンス変数に値は入っているか?
バリデーションを通してエラーがあるかどうか?
エラーメッセージの内容は?
を確認します。
context '失敗' do
it "priceが空では保存ができないこと" do
@order.price = nil
@order.valid?
expect(@order.errors.full_messages).to include("Price can't be blank")
binding.pry ←
end
end
インスタンス変数の中身が、代入した price: nil になっています。
これにより@order.valid?の結果は false になり、
エラーメッセージは "Price can't be blank" であることが確認できました。
「priceが空では保存ができないこと」というテストは成功です。