1
0

Rails - Rspec で paralells test を利用して並列処理する ( create / migrate / prepare / setup / drop の違い )

Last updated at Posted at 2023-10-06

公式

Gemfile

gem を追加して bundle install する

gem 'parallel_tests'

database.yml

公式READMEの通り DB設定で環境変数を利用するようにする
この環境変数はテスト実行時などに自動的に paralells spec が付与してくれる

test:
  database: yourproject_test<%= ENV['TEST_ENV_NUMBER'] %>

テスト実行

rails parallel:setup
rails parallel:spec

うまく行かない場合は以下でも良いかもしれない
parallel:setup / parallel:prepare コマンドは使わなくてもテスト実行できる

rails parallel:create
rails parallel:migrate
rails parallel:spec

何か思わぬエラーが起きた時は drop してからやり直すと良い

rails parallel:drop

コマンド

DB作成

rake parallel:create

結果の例

すべてのテスト用DBを作成してくれる

Created database 'example_test2'
Created database 'example_test4'
Created database 'example_test'
Created database 'example_test3'

マイグレーション

すべてのテスト用DBをマイグレーションする

rake parallel:migrate

Prepare

Copy development schema (repeat after migrations)

rake parallel:prepare

developementのスキーマをコピーしてくれるようだ
テスト用DBがない状態でもDB作成・テーブル作成までしてくれる

ここでいうスキーマとは何かというと、schema.rb を見ているわけではなくて実際の development のデータベース内容を見てコピーしてるっぽい

なので例えばCIでの実行であれば、まずdevelopのDBを作成しておく必要がある

例:

RAILS_ENV=development bundle exec rails db:create db:schema:load
bundle exec rails parallel:prepare

自動テスト用のDB作成でマイグレーションファイルの内容を全て走らせていると時間がかかるので、このような方式のほうがテスト時間を縮められるかもしれない

セットアップ

Setup environment from scratch (create db and loads schema, useful for CI

rake parallel:setup

もろもろ準備してくれてテスト用DBを作成してくれるみたいだ

こちらはprepareとは違って実際のDBではなく schema.rb を見てそう
ただし seeds.rb も実行されるようなのでテストにseeds.rbの値を含めたくない場合は注意

DB削除

すべてのテスト用DBを削除してくれる

rake parallel:drop

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

公開日時

2023-10-06

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