首页 > 解决方案 > Rspec 验证失败:照片不能为空白

问题描述

我正在尝试为具有照片作为强制性关联的模型创建测试。这是我的模型:

class Car < ApplicationRecord
  has_one_attached :photo

  validates :name, uniqueness: true
  validates :name, presence: true
  validates :photo, presence: true
end

这是我的测试:

require 'rails_helper'

RSpec.describe 'Car', type: :model do
  let(:valid_attributes) do
    {
      name: 'Audi'
    }
  end

  it 'name is unique' do
    Car.create!(name: 'Audi')
    car = Car.new(name: 'Audi')
    expect(car).not_to be_valid
  end
end

测试结果是:

Failures:

  1) Car name is unique
     Failure/Error: Car.create!(name: 'Audi')
     
     ActiveRecord::RecordInvalid:
       Validation failed: Photo can't be blank
     # ./spec/models/car_model_spec.rb:23:in `block (2 levels) in <main>'

我不能做的是附上一张照片进行测试。你有什么建议吗?

标签: rubyrspecrspec-railsruby-on-rails-6

解决方案


如您所料,要通过验证,您必须在测试中添加图片:)

require 'rails_helper'

RSpec.describe 'Car', type: :model do
  let(:valid_attributes) do
    {
      name: 'Audi'
    }
  end

  let(:photo) do
    Rack::Test::UploadedFile.new(
      Rails.root.join('path/to/image.png'), 'image/png'
    )
  end

  it 'name is unique' do
    Car.create!(name: 'Audi', photo: photo)

    car = Car.new(name: 'Audi', photo: photo)
    expect(car).not_to be_valid
  end
end


推荐阅读