タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

IntellJ IDEA(RubyMine) + Rails 4.1 + Rspec (spring)で cannot load such file -- teamcity/spec/runner/formatter/teamcity/formatter (LoadError)

環境

※僕はWindows8.1 + IntelliJ IDEA + リモートインタプリタ(Vagrant + VMwareWorkstation)環境ですが多分他でも同じ

問題

Rails 4.1 でIDEAからrspecを実行しようとするとエラーが発生する。

cannot load such file -- teamcity/spec/runner/formatter/teamcity/formatter (LoadError)

原因

springからrspecを実行する際、IntelliJ IDEA用のフォーマッタがロードパス上に見つからないこと

対策

binstubの利用+ロードパス追加

僕の方法

1.binstubの作成

bundle binstubs rspec-core

RAILS_ROOT/bin/rspecが生成される

2.bin/rspecでフォーマッタのロードパス追加

IDEA上でRSpecを実行すると、環境変数RUBYMINE_TESTUNIT_REPORTERが設定されていたのでそれを利用。

#!/usr/bin/env ruby
begin
  load File.expand_path("../spring", __FILE__)
rescue LoadError
end
require 'bundler/setup'

# 追加ここから
# RubyMine / IntelliJ IDES Support
if ENV['RUBYMINE_TESTUNIT_REPORTER']
  # RUBYMINE_TESTUNIT_REPORTER = '/home/vagrant/.rubymine_helpers/rb/testing/patch/testunit'
  rubymine_formatters = [
      File.expand_path('../common/teamcity', ENV['RUBYMINE_TESTUNIT_REPORTER']),
      File.expand_path('../bdd/teamcity', ENV['RUBYMINE_TESTUNIT_REPORTER'])
  ]
  rubymine_formatters.each do |f|
    $:.unshift File.dirname(f) if File.exists?(f)
  end
end
# /追加ここまで

load Gem.bin_path('rspec-core', 'rspec')

これで

bin/spring stop

でspringサーバを一度停止してから、specを実行。(実行時に自動起動されます)

f:id:uzuki05:20141015172614p:plain