LoginSignup
12
9

More than 3 years have passed since last update.

System SpecとFeature Specは何が違うの?

Posted at

新しいRailsプロジェクトに取り組む際に、テストもしっかり書こうと思い調べたことをまとめます。

System SpecとFeature Specの違い

どちらもRSpecで提供されているE2Eテスト機能です。
Feature Specのほうが歴史が長く、古いバージョンのRailsプロジェクトではこちらがよく使われていると思います。

Rails5.1でSystemTestCaseという新しいテストケースクラスが導入され、これをラップした (使えるようにした) System SpecがRSpecでも導入されました。
RSpecリリース

結果として両者が共存している状態ですが、公式READMEではSystem Specが推奨、Feature Specは引き続きサポートしていくことが表明されています。

Before Rails introduced system testing facilities, feature specs were the only spec type for end-to-end testing. While the RSpec team now officially recommends system specs instead, feature specs are still fully supported, look basically identical, and work on older versions of Rails.

System Specの導入により、嬉しいことが増えました。

1. database_cleanerのようなgemを使って、テスト時のDBトランザクション管理をする必要がなくなった。

これはRailsのSystemTestCaseがフレームワーク内でうまいことやってくれるようになり、テスト内で適切にロールバックができるようになったからです。

2. テスト失敗時にtmp/screenshotsにスクリーンショットを保存してくれる。

デバックしやすくなって嬉しいです。

3. JavaScriptを使用した画面のテストをする際の、面倒な設定が不要になった。

Feature SpecでJSを使ったテストを行う場合は、いろいろを面倒な設定が必要でした。
以下は公式ブログの引用です。

RSpec の Feature Spec はデフォルトの Capybara ドライバーとして Rack::Test を利用します。 もし Selenium のような JavaScript が有効なドライバーを使いたい場合は、 ユーザーが自身で Capybara の設定をする必要がありますが、この設定はかなり高度で難しいものでした。 System Spec でデフォルトで Selenium 経由で Chrome を利用しますが、 これらの難解な設定は Rails があなたの代わりに行なってくれます。

上記にあるように、System SpecではデフォルトでSelnium + Chromeを使ってテストが実行されるため、セットアップが必要です。

かんたんにセットアップだけ説明します。
gemにselenium-webdriverを追加します。

Gemfile
gem 'rails', '6.0.3.4' # 5.1以上が必須
# ---
group :development, :test do
# ---
  gem 'rspec-rails'
# ---
end

group :test do
  gem 'capybara'
  gem 'selenium-webdriver'
end

ローカルマシンにChromeDriverをインストールしておきましょう。

$ brew install chromedriver

Docker環境の場合は、Dockerfile内でインストールしたり、docker-compose内でイメージを指定したりしてできそうです。

docker-compose.yml
  chrome:
    image: selenium/standalone-chrome:3.141.59
    volumes:
      - /dev/shm:/dev/shm

参照記事

ありがとうございました。

12
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9