rspecで実行順序に依存してエラーが発生する場合、テスト実行時の seed番号 を指定することで実行順序を固定することができる。
特定の失敗した時の seed番号 をメモしておいて、コマンド実行時に指定することでその時の実行順序を維持してくれるので、デバッグが可能となります。
実行順序のデバッグ方法
rspec実行後に以下のように最後に出力される seed番号 を確認。
…省略
Finished in 1 minute 29.16 seconds (files took 11.54 seconds to load)
800 examples, 0 failures, 0 pending
Randomized with seed 1254 <=この 1254が seed番号
rspec
コマンドのオプションで指定する場合
--order rand:[seed番号]
OR
--seed [seed番号]
(例)
bundle exec rspec spec/ --seed 12345
rake spec
コマンドを使用する場合のSPEC_OPTS環境変数を利用する
SPEC_OPTS="--seed [seed番号]"
(例)
SPEC_OPTS="--seed 12345" bundle exec rake spec
参考サイト
関連するTips
実行順序とは違うのですが、rspecで特定のブロック(行数)を指定してテストを実行する方法
bundle exec rspec spec/controllers/users_controller_spec.rb:123
順番に依存するテストでエラーが出るまで実行し続ける方法
ただのシェルのワンライナーですが、bundle exec rspec spec/
コマンドを実行し続けてエラーが発生したら終了させる方法です。お昼行く前に流して返ってきたらテストが落ちているはず、、きっと。。
while true; do bundle exec rspec spec/; if [ $? -ne 0 ]; then echo "Error"; break; fi done
以上、備忘録のため。。。