大ちゃんの駆け出し技術ブログ

RUNTEQ受講生のかわいいといわれるアウトプットブログ

【RSpec】supportディレクトリ

はじめに

こんにちは!大ちゃんの駆け出し技術ブログです。

supportディレクトと聞かれてRSpecについてのこととピンとくる方はいらっしゃいますか?supportディレクトリを一言で表すと、「RSpecの設定だったりmoduleファイルを一箇所にまとめておくための場所」です。

テストは機能、モデルの数が増えれば増えるほど数が増え複雑になります。そのため、RSpecのテスト方法をテストによって分けたり、どのテストでも必要となる機能(ログイン)などが増えます。それらをsupportディレクトリ配下に管理する取り決めをしておくことで、設定やモジュールファイルを探す手間がすごく省けるのです。実際に試してみましょう!

なお、今回使用するアプリケーションは、毎度お馴染みの現場Railsのchapter7まで終えている状態のアプリケーション「taskleaf」です。同じ状態でハンズオンで試したいという方は現場Railsのchapter7までを終わらせてから取り組んでください。ただし、今回はchapter5まででも問題ないはずです!

実装の概要

上述しましたように、supportディレクトリを作る理由はテストを行う上で必要である設定やmoduleをまとめるためにあります。

都合の良いことに、現在のtaskleafアプリケーションではテスト形式であるcapybaraの設定がspec_helper.rb内に書かれています。

# spec/spec_helper.rb
require 'capybara/rspec'
RSpec.configure do |config|
  config.before(:each, tipe: :system) do
    driven_by :selenium_chrome_headless
  end
・
・
・
・

spec_helper.rb内は現在ちょうど100行もあるファイルです。しかも、設定を追加するために追記することもあると思います。そうなった時、capybaraの設定を変更する時に上記のcapybaraの設定コードを変更するために探すのは少し手間かと思います。例えば、現在はオプションで:selenium_chrome_headlessを設定していますが、これを変更するとなると100行もあるファイルの中からcapybaraの設定を見つけなければならないので手間ですね。

このcapybaraのようなテストの設定をsupportディレクトリ配下に移しておくことで、後々変更するとなった時に、supportディレクトリ配下を探すということがわかっているので、手間はだいぶ省けることになります。

実装方法

実装方法自体はさほど難しくありません。

まず、supportディレクトリを手動で作成し、その配下にcapybara.rb(ファイル名はrubyファイルであれば任意)を手動で作成します。

# spec/support/capybara.rb

手動で作成したので何もない状態です。

ここに下記内容を記載します。RSpec.configureはspec_helper.rbファイルにも記載されているRSpecの設定を記述する箇所です。

# spec/support/capybara.rb
RSpec.configure do |config|

end

ここにspec_helper.rbに記載されているcapybaraの設定をcapybara.rbに移します。spec_helper.rb内のcapybaraの設定箇所は削除しておきましょう。

# spec/support/capybara.rb
RSpec.configure do |config|
  config.before(:each, tipe: :system) do
    driven_by :selenium_chrome_headless
  end
end

これで実装は完了ではありません。

spec/rails_helper.rbコメントアウトで記載されている下記部分のコメントアウトを外します。

# spec/rails_helper.rb
・
・
# require only the support files necessary.
#
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
・
・

コメントアウトすることでsupportディレクトリ配下にあるRSpecの設定ファイルが読み込めるようになりました。これで実装は完了です。

試しに新しく作成したcapybara.rbの設定を変更しましょう。:selenium_chrome_headless:selenium_chromeと変更してください。

# spec/support/capybara.rb
RSpec.configure do |config|
  config.before(:each, tipe: :system) do
    driven_by :selenium_chrome
  end
end

これで実際にテストを実行すると、chromeが開いた状態でテストが実行されるかと思います。supportディレクトリ配下の設定が適用されている証拠です!

終わりに

現場Railsでは学習しない内容ですが、RUNTEQで使用するアプリではこの設定は必ずされていました。自分で今回の実装をすることは少ないかと思いますが、実装方法を把握しておくだけで、設定ファイルの所在などのspecディレクトリは配下で記述を探す手間がかなり省けるかと思います!

以上、大ちゃんの駆け出し技術ブログでした!