どうも、ウェブ系ウシジマくんです。
さて、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したりする必要はありません。