めちゃくちゃ初歩的な定義、書き方についておさらい
目次
定義の仕方など
RSpec.describe 'テストグループ' do
describe 'ケース1' do
it '1 + 2 は 3 になること' do
expect(1+1).to eq 3
end
end
end
rspecはこんな形になっていますので、それぞれの定義の補足を以下で書きます。
describe
require 'rails_helper'
RSpec.describe 'テストグループ' do
railsで書く場合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'}
end
let
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