min*_*gle 15 ruby rspec ruby-on-rails ruby-on-rails-6.1 ruby-3
升级到 ruby 3 和 rails 6.1 后,我的测试中断了
subject.avatar.attach(fixture_file_upload(Rails.root.join('spec', 'fixtures', 'images', 'avatar.jpg')))
Run Code Online (Sandbox Code Playgroud)
和:
NoMethodError:
undefined method `file_fixture_path' for RSpec::Rails::FixtureFileUploadSupport::RailsFixtureFileWrapper:Class
Did you mean? fixture_path
Run Code Online (Sandbox Code Playgroud)
错误堆栈指向
webmock-3.11.0/lib/webmock/rspec.rb:37
任何建议如何调试它?
Rus*_*eev 21
上面的任何内容都不适合我,但我找到了另一个解决方案。
在工厂里改变了这一点:
photo { fixture_file_upload(Rails.root.join('spec/support/images/test_image.png'), 'image/png') }
Run Code Online (Sandbox Code Playgroud)
对此:
photo { Rack::Test::UploadedFile.new('spec/support/images/test_image.png', 'image/png') }
Run Code Online (Sandbox Code Playgroud)
但之后我遇到了另一个错误:
unknown attribute 'service_name' for ActiveStorage::Blob
Run Code Online (Sandbox Code Playgroud)
并用两个命令解决了这个问题:
rails active_storage:update
rails db:migrate
Run Code Online (Sandbox Code Playgroud)
我希望这对任何人都有用。
mur*_*urb 11
遇到了同样的错误,但必须以不同的方式解决它,因为请求规范中的帖子不接受 file_fixture 返回的对象。
包括include ActionDispatch::TestProcess::FixtureFile在我的请求中为我解决了它。
RSpec.describe "Attachments", type: :request do
include Rack::Test::Methods
include ActionDispatch::TestProcess::FixtureFile
#...
expect {
file = fixture_file_upload("image.jpg", "image/jpeg", :binary)
post collection_work_attachments_path(collection, work), {attachment: {file: file, name: image_name, visibility: [:admin]}}
}.to change(Attachment, :count).by(1)
#...
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |