使用 RSpec 上传的图像在控制器上出现意外 class
Upload image with RSpec has unexpected class on controller
根据 post 请求,我在 RSpec 和 fixture_file_upload
方面遇到了麻烦。
问题是:我试图通过上传发送图像以创建带有图像的类别,但是当图像到达时,它改变了它的 class 类型。
我正在等待进入 params[:category][:image]
和 ActionDispatch::Http::UploadedFile
,但我收到的是 ActionController::Parameters
。
我的请求示例:
context 'when creates a new main category with valid params' do
let(:category) do
{ category: { name: 'Bolos E bolos',
description: 'São bolos sim',
locale: 'pt-BR',
image: fixture_file_upload('images/test-image.png', 'image/png') } }
end
post '/v4/categories' do
it 'upload image' do
expect { do_request(category) }.to change { ActiveStorage::Blob.count }.from(0).to(1)
end
end
end
我得到了什么:
Failure/Error: expect { do_request(category) }.to change { ActiveStorage::Blob.count }.by(1)
expected `ActiveStorage::Blob.count` to have changed by 1, but was changed by 0
如何将图像作为上传发送并在控制器上作为 ActionDispatch::Http::UploadedFile
而不是 ActionController::Parameters
获取它
我无法使您的控制器规范正常工作,但我设法使等效的请求规范正常工作。花了 45 分钟以上却一无所获,我认为这是我能做的最好的了。这似乎有效。 (只需确保 rails 应用程序的 public 文件夹中有一个 avatar.jpg。)
## spec/requests/user_spec.rb
require 'rails_helper'
RSpec.describe "Users", type: :request do
describe "it attaches uploaded files" do
it 'attaches the uploaded file' do
file = fixture_file_upload(Rails.root.join('public', 'avatar.jpg'), 'image/jpg')
expect {
post api_users_path, params: { user: {username: "Ben", avatar: file } }
}.to change(ActiveStorage::Attachment, :count).by(1)
end
end
end
根据 post 请求,我在 RSpec 和 fixture_file_upload
方面遇到了麻烦。
问题是:我试图通过上传发送图像以创建带有图像的类别,但是当图像到达时,它改变了它的 class 类型。
我正在等待进入 params[:category][:image]
和 ActionDispatch::Http::UploadedFile
,但我收到的是 ActionController::Parameters
。
我的请求示例:
context 'when creates a new main category with valid params' do
let(:category) do
{ category: { name: 'Bolos E bolos',
description: 'São bolos sim',
locale: 'pt-BR',
image: fixture_file_upload('images/test-image.png', 'image/png') } }
end
post '/v4/categories' do
it 'upload image' do
expect { do_request(category) }.to change { ActiveStorage::Blob.count }.from(0).to(1)
end
end
end
我得到了什么:
Failure/Error: expect { do_request(category) }.to change { ActiveStorage::Blob.count }.by(1)
expected `ActiveStorage::Blob.count` to have changed by 1, but was changed by 0
如何将图像作为上传发送并在控制器上作为 ActionDispatch::Http::UploadedFile
而不是 ActionController::Parameters
我无法使您的控制器规范正常工作,但我设法使等效的请求规范正常工作。花了 45 分钟以上却一无所获,我认为这是我能做的最好的了。这似乎有效。 (只需确保 rails 应用程序的 public 文件夹中有一个 avatar.jpg。)
## spec/requests/user_spec.rb
require 'rails_helper'
RSpec.describe "Users", type: :request do
describe "it attaches uploaded files" do
it 'attaches the uploaded file' do
file = fixture_file_upload(Rails.root.join('public', 'avatar.jpg'), 'image/jpg')
expect {
post api_users_path, params: { user: {username: "Ben", avatar: file } }
}.to change(ActiveStorage::Attachment, :count).by(1)
end
end
end