元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

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