めちゃくちゃ初歩的な定義、書き方についておさらい
					目次
					
					
					
					
定義の仕方など
RSpec.describe 'テストグループ' do
  describe 'ケース1' do
    it '1 + 2 は 3 になること' do
      expect(1+1).to eq 3
    end
  end
endrspecはこんな形になっていますので、それぞれの定義の補足を以下で書きます。
describe
require 'rails_helper'
RSpec.describe 'テストグループ' dorailsで書く場合rails_helperが必ず必要。
「describe」はテストのグループを定義。
上記はテストグループのテストですよという宣言になる。
describeには文字列ではなくクラス、メソッドを渡すこともできる。
context
RSpec.describe 'テスト' do
  context 'パラメータが正しいとき' do
    it '完了画面を表示すること' do
   ***
    end
  end
  context 'パラメータが正しくないとき' do
    it '編集画面に戻ること' do
      ***
    end
  end
end
discribeと同じくグループ化を定義するものだが、分岐を伴う場合などにはこちらを使う。使い分けると可読性がよくなる。
it…do…end
it '1+2は3になること' do
 expect(1+2).to eq 3
end「it」テストひとつの単位。it…do…endでテストケースを書いていく。
これはexampleという単位にまとめられ、テストコードを実行したときなんかに登場する。
例)2 examples, 0 failures, 2 passed
エクスペクテーション
「expect(***).to eq ***」の部分
「expect」は「期待する」
「.to」は「~であること」
「eq」は「等しい」。この部分をマッチャという。
繋げて読んで何をするテストかがわかる。
expect(1+2).to eq 3
expect(1+2).not_to eq 2「.not_to」は「~でないこと」を定義できる。(to_notでも可)
RSpec.describe 'テストグループ' do
  describe 'ケース1' do
    it '1 + 2 は 3 になること' do
      expect(1+1).to eq 3
    end
  end
  describe 'ケース2' do
    it '2 + 2 は 5ではないこと' do
      expect(2+2).to_not eq 5
    end
  end
endここまででこのテストの意味がわかるようになる。
describeはいくつもネストが可能で、最上位のdescribe以外はrspecを省略可能。
before..do..end
前提条件などを定義。
before do
  @params = { name: '田中', sex: 'man'}
endlet
let(:params) { {} }インスタンス変数「@params」を「let(:params)」のように置き換えることが可能。
letは遅延評価され必要なとこに呼び出されるのが特徴。
RSpec.describe User do
  describe '#greet' do
    let(:user) { User.new(params) }
    let(:params) { { name: 'たろう', age: age } }
    context '12歳以下の場合' do
      let(:age) { 12 }
      it 'ひらがなで答えること' do
        expect(user.greet).to eq 'ぼくはたろうだよ。'
      end
    end
    context '13歳以上の場合' do
      let(:age) { 13 }
      it '漢字で答えること' do
        expect(user.greet).to eq '僕はたろうです。'
      end
    end
  end
end遅延評価がわかりやすい例
https://qiita.com/jnchito/items/42193d066bd61c740612
 
               
                      ![[技術編]年末年始の4日間でサブスク管理のSaaSを開発しました](https://i2.wp.com/weblion303.net/wp-content/uploads/2021/01/ロゴマスタ.png?fit=375%2C211&ssl=1) 
						
						