環境
$ rails -v Rails 6.0.3.2 $ ruby -v ruby 2.7.1
手順
gem インストール
RSpec と FactoryBot をインストール。
group :development, :test do gem "factory_bot_rails" gem "rspec-rails" end
インストールする。
$ bundle install
RSpec 導入
RSpecを導入する。
$ bin/rails generate rspec:install
testディレクトリを削除。
$ rm -r ./test
application.rb
class Application < Rails::Application config.generators do |g| g.test_framework :rspec end end
これを設定しないとminitestのテストファイルが生成され続けてしまう。
自動生成するファイルの種類も設定できる。
config.generators do |g| g.test_framework :rspec, fixtures: false, view_specs: false, helper_specs: false, routing_specs: false end
spec_helper.rb
"capybara/rspec"
をrequire- ブラウザにはヘッドレスChromeを設定
require "capybara/rspec" RSpec.configure do |config| config.before(:each, type: :system) do driven_by :selenium_chrome_headless end ~
rails_helper.rb
以下の記述を加えることで、FactoryBot.~
の文字を省略することができる。これはお好みで。
RSpec.configure do |config| config.include FactoryBot::Syntax::Methods end
次に、初期設定でコメントアウトされてる以下の部分をコメントイン。
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
これでsupport
ディレクトリ下に設置したヘルパーを使い回せる。登録したスタブを呼び出すときなどいろいろ。
スペックファイルの生成
#システムスペック(システムテスト) $ bin/rails g rspec:system ファイル名 #モデルスペック(モデルテスト) $ bin/rails g rspec:model ファイル名
rspecの実行
$ bundle expec rspec
-fd
オプションをつけると仕様記述が表示される。
$ bundle expec -fd rspec
システムスペックには何を書けばいいか
E2Eテストなので、ユーザーの行動に沿ったテストを書く。その際はCRUDを意識する。
たとえばタスク管理機能の部分をテストしたいなら、
- Create: タスクを作成できるか
- Read: タスクが表示できるか(一覧ページや詳細ページ等)
- Update: タスクが編集できるか
- Delete: タスクを削除できるか
となる。
参考
- RailsアプリへのRspecとFactory_botの導入手順 - Qiita
- 【Rails】RSpecとFactroyBotの導入・設定まとめ | にょけんのボックス
- Railsプロジェクトで、FactoryBotを用いたテストデータを作成する方法 - 夜行月報
RSpecを学ぶのにオススメの記事
RSpecの使い方を手っ取り早く、正確に知るには以下の記事シリーズがすばらしい。
- 使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 - Qiita
- 使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」 - Qiita
- 使えるRSpec入門・その3「ゼロからわかるモック(mock)を使ったテストの書き方」 - Qiita
- 使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」 - Qiita
RSpec で TDD を体験できる記事シリーズ。