1. 導入
1.1. rspec本体のインストール
以下参考に実施
1.2. 関連gem(factory_bot, faker)のインストール
- factory_bot: ダミーデータのレコードを作るツール
- faker: レコード内のカラム値をランダムにセットしやすくするツール
以下参考に実施
1.3. 動作確認
1.3.1. specファイル, facroryファイルが生成されること
のUsageを参考に以下の状態になることを確認
# modelファイルをrails gコマンドで生成したとき
bundle exec rails g model <model> --migration-skip
=>
以下が生成されればOK
- app/models/<model>.rb
- spec/models/<model>_spec.rb
- spec/factories/<models>.rb
# rspec関連ファイルのみを生成したいとき(すでにmodelファイルが存在するときなど)
bundle exec rails g rspec:model <model>
=>
以下が生成されればOK
- spec/models/<model>_spec.rb
- spec/factories/<models>.rb
1.3.2. rspecがうまく動作すること
# [前提] 3.1 によってデフォルトの<model>_spec.rb が生成されている状態であること
# テストを実行する
bundle exec rspec
=>
以下のように表示されればOK(※)
Finished in 0.00552 seconds (files took 2.32 seconds to load)
1 example, 0 failures, 1 pending
※以下のエラーが表示される場合は、おそらくtest環境向けのDB周りが適切でない(接続設定がおかしい, test環境向けのDBがそもそも存在しない、テーブル定義が反映されていない など)ことが原因
An error occurred while loading ./spec/models/user_spec.rb.
Failure/Error: ActiveRecord::Migration.maintain_test_schema!
ActiveRecord::ConnectionNotEstablished:
Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)
これは、spec/rails_helper.rb
というファイル内で、
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
という記述があり、RAILS_ENV は testになる
参考: https://shinkufencer.hateblo.jp/entry/2019/12/28/000000
2. 使いやすくカスタマイズ
2.1. Factorybot
2.1.1. Facrorybotのクラスメソッド名だけでのcreate
rails_helper.rbに以下を追加(参考)
rails_helper.rb
config.include FactoryBot::Syntax::Methods
2.2. rspecで使用するファイルの置き場
一般的に、specファイル内で使用するファイル(画像とか)は、spec/
配下にfixture/files/
というディレクトリを作成し、配下に置いておくものらしい。
こうしておくと、
specファイル内で、file_fixture('<画像ファイル名(パス不要)>')
とするだけで、File.open('<パス>/<画像ファイル名>')
と同じ挙動となり、ちょっとシンプルに書ける。