Ruby Rspec验证失败:照片罐';不要空白

Ruby Rspec验证失败:照片罐';不要空白,ruby,rspec,rspec-rails,ruby-on-rails-6,Ruby,Rspec,Rspec Rails,Ruby On Rails 6,我正在尝试为一个模型创建一个测试,该模型将照片作为强制关联。 这是我的模型: class Car < ApplicationRecord has_one_attached :photo validates :name, uniqueness: true validates :name, presence: true validates :photo, presence: true end 试验结果如下: Failures: 1) Car name is uniq

我正在尝试为一个模型创建一个测试,该模型将照片作为强制关联。 这是我的模型:

class Car < ApplicationRecord
  has_one_attached :photo

  validates :name, uniqueness: true
  validates :name, presence: true
  validates :photo, presence: true
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>'
故障:
1) 汽车名称是唯一的
失败/错误:Car.create!(名称:“奥迪”)
ActiveRecord::RecordInvalid:
验证失败:照片不能为空
#./spec/models/car\u model\u spec.rb:23:in‘block(2层)in’

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

在您的
车型中,您有以下建议:

validates :photo, presence: true
这意味着每辆
汽车
必须有一张
照片
。当您在规格中写入此项时:

Car.create!(name: 'Audi')
您正在尝试创建一辆没有照片的汽车。因此,错误提示验证失败,因为照片不能为空。 您可以删除
validates:photo,presence:true
,或者将
photo:some\u photo\u url
传递到
Car.create!()

其中
some\u photo\u url
是汽车照片的url。
要将图像保存到ActiveRecord中的记录,您应该查看
Active::Storage

在您的
车型中,您有以下功能:

validates :photo, presence: true
这意味着每辆
汽车
必须有一张
照片
。当您在规格中写入此项时:

Car.create!(name: 'Audi')
您正在尝试创建一辆没有照片的汽车。因此,错误提示验证失败,因为照片不能为空。 您可以删除
validates:photo,presence:true
,或者将
photo:some\u photo\u url
传递到
Car.create!()

其中
some\u photo\u url
是汽车照片的url。
要将图像保存到ActiveRecord中的记录,您应该查看
Active::Storage

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

require'rails\u helper'
RSpec.description'Car',type::model do
让(:有效的_属性)执行
{
名称:“奥迪”
}
结束
让(:照片)做吧
Rack::Test::UploadedFile.new(
join('path/to/image.png'),'image/png'
)
结束
它的“名称是唯一的”吗
汽车,创造!(姓名:“奥迪”,照片:照片)
车=车。新(名称:“奥迪”,照片:照片)
期望(汽车)。无效
结束
结束

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

require'rails\u helper'
RSpec.description'Car',type::model do
让(:有效的_属性)执行
{
名称:“奥迪”
}
结束
让(:照片)做吧
Rack::Test::UploadedFile.new(
join('path/to/image.png'),'image/png'
)
结束
它的“名称是唯一的”吗
汽车,创造!(姓名:“奥迪”,照片:照片)
车=车。新(名称:“奥迪”,照片:照片)
期望(汽车)。无效
结束
结束

Typo:ActiveStorage*我在创建实例时尝试添加照片的url,但无效。我还尝试了
first\u car=car.new(name:'Audi')first\u car.photo.attach(io:File.open('/app/assets/images/')、filename:'Audi.jpeg',content\u type:'image/jpg')
,但我没有得到这样的文件或目录@rb\u sysopenTypo:ActiveStorage*我在创建实例时尝试添加照片的url,但不起作用。我还尝试了
first\u car=car.new(名称:'Audi')first\u car.photo.attach(io:File.open('/app/assets/images/')、文件名:'Audi.jpeg',内容类型:'image/jpg')
,但我没有得到这样的文件或目录@rb\u sysopen