dev/mom0tomo

技術メモ

「使えるRSpec入門・その1 」読んだメモ

読んだもの

qiita.com

学んだこと

  • 原則として「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さ」よりも「読みやすさ」を大事にする