Rails tips: テストから共通機能を切り出すリファクタリング(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: RSpec - refactor your tests and extract common test functionality 原文公開日: 2018/02/07 著者: Paweł Dąbrowsk Rails tips: テストから共通機能を切り出すリファクタリング(翻訳) テストもコードなので、アプリのクラスと同じ要領でリファクタリングできます。さまざまなテストで同じコード片が必要になることはざらにあるので、同じコードを繰り返し書かずに済むと助かります。 たとえばコントローラのテストではよく次のような感じのコードを書きます。 get :some_action expect(JSON.parse(response.body)).to eq({‘key’ => ‘value’}) レスポンスをJSON形式で返すAPIコントローラがある場合のexpectationは普通こんな感じになることでしょう。ヘルパーを使ってこのテストをリファクタリングできます。まずspec/supportディレクトリでファイルを作成し、app/helpersディレクトリのファイルで書くときと同じ要領でシンプルなモジュールとメソッドを作成します。 module ControllerHelpers def json_response JSON.parse(response.body) end end このヘルパーをcontroller specでも使えるようにします。それにはspec_helper.rbファイルかrails_helper.rbファイルで次のようにヘルパーをrequireします。 require ‘support/helpers/controller_helpers’ 同じファイルで、このヘルパーメソッドをspecで使うために以下を書いてRSpecで認識できるようにします。 RSpec.configure do |config| … config.include(ControllerHelpers, :type => :controller) … end 作成したヘルパーはcontroller specでしか使いたくないので、RSpecがヘルパーメソッドをインクルードしてよいspecの種類を指定します。使いたいヘルパーメソッドが多数ある場合は、以下のコードを使って一括読込できます。 Dir[Rails.root.join(“spec/support/helpers/*.rb”)].each {|f| require f} リファクタリング これで、json_responseヘルパーメソッドを使うようにexpectationを更新できます。 expect(json_response).to eq({‘key’ => ‘value’}) 以上でおしまいです。よいテストを書く方法もご覧ください。 お知らせ: RSpec & TDDの電子書籍を無料でダウンロード もっと稼ぎたい方や会社をさらに発展させたい方へ: テスティングのスキルの重要性にお気づきでしょうか?テストを正しく書き始めることが、唯一のファーストステップです。無料でダウンロードいただける私の書籍『RSpec & Test Driven Developmentの無料ebook』をどうぞお役立てください。 関連記事 Rails tips: RSpecの`let`ブロックや`before`ブロックは基本避けるべき(翻訳)