Rails
RSpec

RSpec モデルスペック

(モデルを作成した後にRSpecを導入する場合)

$ rails g rspec:model モデル名

流れ

1.使用するモデルの作成
2.テストコードの記述
3.テストコードを実行し失敗することを確認
4.データが保存できないように制限する機能を作成(validation)
5.テストを実行し、正しく動いているか確認

spec/models/post_spec.rb
require 'rails_helper'

RSpec.describe Post, type: :model do
  pending "add some examples to (or delete) #{__FILE__}"  # この行を削除
  context "データが正しく保存される" do
    before do
      @post = Post.new
      @post.title = "Hello WebCamp"
      @post.content = "今日も晴れです。"
      @post.save
    end
    it "全て入力してあるので保存される" do
      expect(@post).to be_valid
    end
  end

  context "データが正しく保存されない" do
    before do
      @post = Post.create(title: "", content: "今日も晴れです。")
    end
    it "titleが入力されていないので保存されない" do
      expect(@post).to be_invalid
      expect(@post.errors[:title]).to include("can't be blank")
    end
  end
end

誤判定ではないことを証明するためには、
・toをto_notに変えて、テストが失敗することを確認する
・バリデーションをコメントアウトし、テストが失敗することを確認する
の二つのやり方がある。