Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?
@shima-zu

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

新しい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

参照記事

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?