[CircleCI 2.0] Rails 5.x で bundler: failed to load command: rspec ~ NoMethodError: undefined method `captures’ for nil:NilClass エラーの解決方法

CircleCI 2.0 + Ruby on Rails 5.x で bundle exec rspec コマンドでテストケースを実行させると、以下のようなエラーが発生しました。

CircleCI | サークルシーアイ

bundler: failed to load command: rspec (/home/circleci/yourapp/vendor/bundle/ruby/2.4.0/bin/rspec)
NoMethodError: undefined method `captures' for nil:NilClass

無事に解決できたので、その修正方法をご紹介します。

前提

以下のアーキテクチャでお送りしています。

  • CircleCI 2.0 (無料プラン)
  • Rails 5.1.4
  • Yarn 0.27.5
  • Webpacker 3.0.2

CircleCI 2.0 無料プランで動かすための修正内容

CircleCI 2.0 の無料プランはコンテナが1つしか動かないので、TEST_FILES=”$(circleci tests glob “spec/**/*_spec.rb” | circleci tests split –split-by=timings)” のコードが不要でした。

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 7cd1539..e5a0f8b 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -48,13 +48,10 @@ jobs:
           name: run tests
           command: |
             mkdir /tmp/test-results
-            TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
-
             bundle exec rspec --format progress \
                             --format RspecJunitFormatter \
                             --out /tmp/test-results/rspec.xml \
-                            --format progress \
-                            "${TEST_FILES}"
+                            --format progress
 
       # collect reports
       - store_test_results:

この処理は、CircleCI 公式サイトからそのまま持ってきたサンプルコードでした。無料プランですぐ動かせないのは、あまりユーザーフレンドリーではないように感じますね。

無料プランでも動く .circleci/config.yml

CircleCI 2.0 の無料プラン (container 1つだけ) でも動く .circleci/config.yml のサンプルコードは別記事 [CircleCI 2.0] Rails 5.x + Webpacker 構成で Rspec テストを実行する job 設定方法 に書きましたので、こちらをご参照ください。

以上、CircleCI 2.0 で Rails 5.x の Rspec を動かしたい、現場からお送りしました。

参考情報