在RSpec中对Carrierwave进行挖掘以加速测试

时间:2014-02-26 14:42:07

标签: ruby-on-rails ruby rspec carrierwave

我在RSpec中将对象保存到数据库。该对象具有Carrierwave字段及其存在验证。我在工厂中使用fixture_file_upload来表示该字段,而且速度非常慢。我想完全删除Carrierwave文件处理,但所有解决方案似乎都已过时,我无法让它们工作。

我的模特:

class Product < ActiveRecord::Base
  validates_presence_of   :image
  mount_uploader :image,  ProductMainImageUploader
end

我的工厂:

factory :product do
  name          { Faker::Product.product_name }
  slug          { name ? name.parameterize : nil }
  image         { 'sample_image.jpg' }
end

我的规格:

describe Product do
  it "creates record" do
    ProductMainImageUploader.any_instance.stub(:store!)
    ProductMainImageUploader.any_instance.stub(:store_image!)
    product = create(:product)
  end
end

结果:

  1) Product creates record
     Failure/Error: product = create(:product, name: 'heyo')
     ActiveRecord::RecordInvalid:
       Validation failed: Image can't be blank
     # ./spec/models/product_spec.rb:26:in `block (2 levels) in <top (required)>'

存根完全没有效果。我正在使用Ruby 2.1.0。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

尝试存根图像

before do
  Product.stub(:image).and_return(ProductMainImageUploader.new)
end