ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

RSpec+Sporkでテストを高速化する方法

いまさらすぎる話題ですが、Rails初心者の私にとっては新鮮な話ですので、ご勘弁ください。。。

RSpecでテストを書いてて「やけに遅いな〜こんなものか」と思っていたのですが、Sporkなるものがあるらしいですね。 ということで設定してみました。

設定方法

Gemfileに書く

とりあえずGemfileを編集します。 rspec-railsspork-railsを書きます。

group :development, :test do
  gem 'rspec-rails'
  gem 'spork-rails'
end

インストールする

有無を言わさずインストールします。

$ bundle install

RSpecを初期化する

すでにしていれば問題ないですが、していないとSpork設定時に怒られるので……。

これをやると、spec/spec_helper.rbが生成されます。

$ bundle exec rspec:install

Sporkを初期化する

つぎにSporkの設定ファイルを生成します。 これをやると、spec/spec_helper.rbが勝手に編集されます。

$ bundle exec spork --bootstrap

設定ファイルを編集する

spec/spec_helper.rbを開いて、RSpec生成時に書いてあった設定をSpork.prefork doendの中に書きます。

Spork.prefork do
  # ここに書く
end

Spork.each_run do
end

.rspecを編集する

Sporkを使うには、bundle exec rspec --drbとすればよいです。 ただ、毎回--drbをつけるのも面倒なので、標準でつけるようにします。

これは、Railsのルートディレクトリにある.rspecに書きます。

--color
--drb

使用方法

Sporkを起動する

ようやく設定が終わったので、Sporkを起動します。

$ bundle exec spork

テストする

この状態でRSpecでテストすると、ものすごくはやいです。

$ bundle exec rspec

注意

Sporkはもろもろの設定を事前に読み込んでおくためにテストが高速化されます。 なので、config/routes.rbなどを編集したら、Sporkを再起動しなければなりません。

この辺自動リロードなどもできると思いますが、ちょっと疲れたので今度にします。。。