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>'

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

正如您所猜测的,要通过验证,您必须在测试中添加一张图片:(

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

Car模型中,您有以下内容:

validates :photo, presence: true

这意味着每个Car都必须有一个photo。当你在你的规格中写下这一点时:

Car.create!(name: 'Audi')

您正试图创建一辆没有照片的汽车。因此,错误表示验证失败,因为照片不能为空。您可以删除validates :photo, presence: true,也可以将photo: some_photo_url传递给Car.create!():

Car.create!(name: 'Audi', photo: some_photo_url)

其中some_photo_url是汽车照片的url。要将图像保存到ActiveRecord中的记录,您应该查看Active::Storagehttps://edgeguides.rubyonrails.org/active_storage_overview.html

相关内容

  • 没有找到相关文章

最新更新