0
0

More than 1 year has passed since last update.

[Rails] rspec(+α)のセットアップ手順

Last updated at Posted at 2022-01-28

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('<パス>/<画像ファイル名>')と同じ挙動となり、ちょっとシンプルに書ける。

0
0
0

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
0
0