5

私は次のモデルを持っています:

class Face < ActiveRecord::Base
  attr_accessible :face_index, :design, :background
  belongs_to :template
  mount_uploader :background, BackgroundUploader
end

BackgroundUploader:

class BackgroundUploader < CarrierWave::Uploader::Base
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end

Railsコンソールを起動すると、顔を作成して背景を保存できます。

f = Face.create(:face_index => 0)
f.background = File.open("/path/to/image.jpg")
f.save!

それはすべて機能しますが、rspecに移動しようとすると、失敗します。

Failures:

  1) Face A new face 
     Failure/Error: @face.background = File.open(image_path)
     NoMethodError:
       undefined method `background_will_change!' for #<Face:0x007ff63d9f7410>

仕様:

describe Face do

  before(:each) do
    image_path = Rails.root.join('spec/support/images', '02.jpg').to_s
    @face = FactoryGirl.create(:face)
    @face.background = File.open(image_path)
    @face.save!
  end

  describe "A new face" do
    it { should belong_to(:template) }
  end

end

工場:

FactoryGirl.define do    
  factory :face do
    face_index 0
  end
end

アップローダー列がデータベースから欠落しているときにそのエラーを以前に見ましたが、私の移行が開発に対して正しい場合、それらはテストに対して正しいはずです、そうではありませんか?それを機能させるために仕様に何かを要求する必要がありますか?

ありがとう!

4

1 に答える 1

5

ああ、答えは私の最後の段落でした、実行するのを忘れていました

rake db:test:load

休憩を取って問題に戻る良い例。

于 2012-05-16T16:16:59.373 に答える