Rails tips: RSpecの`let`ブロックや`before`ブロックは基本避けるべき(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: RSpec - you should avoid let and before blocks to use natural flow 原文公開日: 2018/02/06 著者: Paweł Dąbrowsk Rails tips: RSpecのletブロックやbeforeブロックは基本避けるべき(翻訳) RSpecの作者はそれなりの理由があってbeforeやletブロックを考案しましたが、本当に必要でない限りこれらの利用は避ける方が賢明です。理由は以下のとおりです。 テストの本体からletの定義にジャンプ(またはその逆のジャンプ)することで、テストの自然な流れを妨げることになります。 letを使うとテストが遅くなります。letがシンプルなメソッドに変換されるのは最後の段階だからです(memory usage benchmark)を参照(訳注: リンク切れです)。 specが読みづらくなります。正しいコンテキストを追うにはあちこちにジャンプしなければなりません。 spec同士に依存関係が生じます。specは分離するべきです。 letブロックやbeforeブロックを使った場合と使わない場合でどう変わるかを、以下のテスト例で考えてみましょう。 require ‘spec_helper’ describe Users::NameService do describe ‘#name’ do let(:user) { instance_double(User, posts?: false) } it ‘ユーザー名を返す’ do expect(described_class.new(user).name).to eq(user.name) end context ‘ユーザーにpostsがある場合’ … Continue reading Rails tips: RSpecの`let`ブロックや`before`ブロックは基本避けるべき(翻訳)