リア充爆発日記

You don't even know what ria-ju really is.

それでもFactoryGirl+RSpecが遅いと感じたら

Railsのrspecが遅いので対応した結果wwwwwwwwwwwwwwからしばらくして、やっぱり全体的にテストが遅い・・・!と再認識し、コードを書くのにストレスを感じてきたから本腰入れて調べてみることにした。

で、結果がしょぼかったから経緯は省いて結論からいうと、fixture_file_uploadのせいだった。
このアプリではpaperclipを使っていて、models/user.rbにavatarを持っていた。

  has_attached_file :avatar, :styles => {:original => "300x300#", :thumb => "50x50#", :icon => "32x32#"},

このため、spec/factories/user.rbも以下のようになっていた。

FactoryGirl.define do
  factory :user do
    name     "ria10"
    sequence(:email) { |n| "ria10-#{n}@example.com" }
    password "foobar"
    locale "ja"
    avatar { fixture_file_upload("#{::Rails.root}/spec/fixtures/images/cat.jpg", 'image/jpg', true) }
    status UserStatus::ACTIVE
  end
end

これが重くなる原因だった。そりゃ毎度ファイルアクセスが発生すれば・・・と結果がでればわかるけど完全に想定外だった。
特にuserモデルは他のモデルの前提条件的なモデルだったので影響がでかく、モデル全体のテストで5倍以上の差がでた。。

before

[ria10@ria10-mba ria10-web (bugfix)]$ bundle exec rspec spec/models/
................................................................................................................................................

Finished in 1 minute 11.6 seconds
144 examples, 0 failures

after

[ria10@ria10-mba ria10-web (bugfix)]$ bundle exec rspec spec/models/
................................................................................................................................................

Finished in 12.41 seconds
144 examples, 0 failures

ファイルは必要なときだけアクセスしようず

改訂新版 基礎Ruby on Rails 基礎シリーズ

改訂新版 基礎Ruby on Rails 基礎シリーズ