スポンサーリンク

どうも、ウェブ系ウシジマくんです。

さて、RSpecでテストを書いていて、

ここの処理はヘルパーにして他のテストでも使い回せるようにしたいなー。

と思ったことはありませんか?

実はそれ、簡単に実現できます。

ということで、今回はRSpecでヘルパーを作成する方法について、紹介します。

まずはspecディレクトリ配下にsupportディレクトリを作成する。

RSpecでヘルパーを使うために、まずはspecディレクトリ配下にsupportというディレクトリを作成しましょう。

mkdir spec/support

続いて、共通化して切り出したいヘルパーのファイルを作成します。

touch spec/support/json_api_helper.rb

ファイルを作成したら、共通化して切り出したい処理を、先程作成したファイルに書いていきます。

いうてもモジュール化するだけなので、そんなに難しいことはないです!

module JsonApiHelpers
  def json
    JSON.parse(response.body)
  end

  def json_data
    json["data"]
  end
end

とりあえず、これで準備はOK。

続いて、rails_helper.rbを編集する

GemfileにRSpecを導入した際、

bin/rails g rspec:install

を実行すると思うのですが、その際に作成されるのがrails_helper.rbです。

RSpecでヘルパーを作成する際には、このrails_helper.rbでコメントアウトされている以下の箇所をコメントインする必要があります。(23行目あたり)

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

処理内容としては、eachメソッドでsupportディレクトリ配下のファイルを1つずつ読み込んでいますね。

コメントインしたら、rails_helper.rbにsupportディレクトリに作成したヘルパーをincludeしてください。

config.include JsonApiHelpers

最後に、rails_helper.rbの全体像を確認してみましょう。

# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  config.use_transactional_fixtures = true

  config.infer_spec_type_from_file_location!

  config.filter_rails_from_backtrace!

  config.include FactoryBot::Syntax::Methods
  config.include JsonApiHelpers
end

これでOK!あとは、使いたい箇所でヘルパーを呼び出せばOK。

rails_helper.rbを編集したので、各ファイルでincludeしたりする必要はありません。

スポンサーリンク
おすすめの記事