Ruby on rails 将活动存储文件附加到设备

Ruby on rails 将活动存储文件附加到设备,ruby-on-rails,ruby-on-rails-5,fixtures,rails-activestorage,Ruby On Rails,Ruby On Rails 5,Fixtures,Rails Activestorage,文档仅显示将文件附加到模型()的方法 固定装置怎么样 在我的模型中,我尝试了文件和文件附件键,但都不起作用 我必须为ActiveStorage::Attachment和/或ActiveStorage::Blob显式创建fixture文件吗?在我的测试中,我发现我必须使用fixture\u file\u upload进行附加。下面是RSpec中的两个示例,但我相信fixture\u file\u upload方法也应该适用于minitest。关键是在顶部包含ActionDispatch::Test

文档仅显示将文件附加到模型()的方法

固定装置怎么样

在我的模型中,我尝试了
文件
文件附件
键,但都不起作用


我必须为
ActiveStorage::Attachment
和/或
ActiveStorage::Blob
显式创建fixture文件吗?

在我的测试中,我发现我必须使用
fixture\u file\u upload
进行附加。下面是RSpec中的两个示例,但我相信
fixture\u file\u upload
方法也应该适用于minitest。关键是在顶部包含
ActionDispatch::TestProcess
(除非您使用的是minitest,否则我认为它在没有包含的情况下是可用的)

附件文件保存在:spec/fixturs/files/filename.gif中

附件的型号规格

require 'rails_helper'
include ActionDispatch::TestProcess

RSpec.describe Whatever, type: :model do
  it 'is valid/invalid depending on file presence' do
    file = fixture_file_upload(Rails.root.join('spec/fixtures/files', 'parrot.gif'), 'image/gif')

    expect(SomeClass.new(an_attribute: 'something', file: file)).to be_valid

    expect(SomeClass.new(an_attribute: 'something').to be_invalid
  end
end
请求规格

require 'rails_helper'
include ActionDispatch::TestProcess

RSpec.describe "whatever", type: :request do
  file = fixture_file_upload(Rails.root.join('spec/fixtures/files', 'parrot.gif'), 'image/gif')

  describe 'POST on whatever controller' do
    it 'saves the record when a file is attached' do
      expect{
        post whatever_path, params: { params: { file: file } }
      }.to change { WhateverModel.count }.by(1)
    end
  end
end

也许我的问题还不够清楚,但我说的是在YAML fixture文件中附加文件,而不是在测试中。看起来这是可能的:虽然我同意这个答案的结论,但有比使用
.attach
fixture\u file\u upload
将其放在YAML中更简单的测试方法