3

capybara機能仕様を実行すると、 factory_girl. これらの遅いファクトリは、機能仕様を大幅に遅くします。機能仕様でさえ、本質的に遅い仕様だと思います。それから私はいくつかの検査をしてもらい、遅い工場のほとんどがpaperclip. ここにペーパークリップを使用したモデルがありました:

FactoryGirl.define do
  factory :asset do
    image Rails.root.join('spec/fixtures/sample.jpg').open
  end
end

paperclipだから、テストを高速化するためのテストモードのような方法があるのだろうか. ここに簡単な解決策があります。実際にトリミングするのではなく、元のファイルをコピーするだけです。

4

2 に答える 2

8

工場でペーパークリップの画像フィールドを設定できます。これにより、ペーパークリップは画像を処理しようとさえしなくなります。

factory :asset do        
  # Set the image fields manually to avoid uploading / processing the image
  image_file_name { 'test.jpg' }
  image_content_type { 'image/jpeg' }
  image_file_size { 256 }
end
于 2013-09-04T04:41:37.567 に答える
4

これを達成する方法を見つけました。次のコードを参照してください。

FactoryGirl.define do
  factory :asset do
    image_file_name { 'sample.jpg' }
    image_content_type 'image/jpeg'
    image_file_size 256

    after(:create) do |asset|
      image_file = Rails.root.join("spec/fixtures/#{asset.image_file_name}")

      # cp test image to direcotries
      [:original, :medium, :thumb].each do |size|
        dest_path = asset.image.path(size)
        `mkdir -p #{File.dirname(dest_path)}`
        `cp #{image_file} #{dest_path}`
      end
    end
  end
end

cpフックを作成した後、factory_girl 内の実際のアセット イメージ パスへのテスト イメージを手動で実行します。それは魅力のように機能します。

于 2013-09-05T02:31:52.553 に答える