「使えるRSpec入門・その1 」読んだメモ
読んだもの
学んだこと
原則として「1つの example につき1つのエクスペクテーション」で書く
- テストの保守性が良くなるため
letで宣言できる変数
**インスタンス変数の例** let(:user) { User.new(params) } # 同じ意味 user = User.new(params)
ローカル変数の例
let(:params) { { name: 'たろう' } } # 同じ意味 @params = { name: 'たろう' }
let は遅延評価される
- before + インスタンス変数は遅延評価されない
- 必要になる瞬間まで呼び出されないので効率がよい
it do ... endのことをexampleと呼ぶ
subject { user.greet } を宣言するときの決まり
- expect(user.greet).to eq 'hogehoge'が
- is_expected.to eq 'hodehode'という書き方になる
shared_examples 'foo' do ... end で再利用したいexampleを定義して、 it_behaves_like 'foo' で定義したexampleを呼び出せる
let の遅延評価によってテストが失敗する場合は、かわりに let! を使う
テストコードは「DRYさ」よりも「読みやすさ」を大事にする