Ruby on rails 未定义的方法'file_fixture_path';升级到ruby 3和rails 6.1之后
在升级到ruby 3和rails 6.1之后,我的测试中断了Ruby on rails 未定义的方法'file_fixture_path';升级到ruby 3和rails 6.1之后,ruby-on-rails,ruby,rspec,ruby-on-rails-6.1,ruby-3,Ruby On Rails,Ruby,Rspec,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'))) 与: 错误堆栈指向 webmock-3.11.0/lib/webmock/rspec.rb:37 对如何调试它有什么建议吗?在更改为file_fixture后,它可以正常工作,relishapp.com/rspec/rspec
subject.avatar.attach(fixture_file_upload(Rails.root.join('spec', 'fixtures', 'images', 'avatar.jpg')))
与:
错误堆栈指向
webmock-3.11.0/lib/webmock/rspec.rb:37
对如何调试它有什么建议吗?在更改为file_fixture后,它可以正常工作,relishapp.com/rspec/rspec rails/v/3-8/docs/file fixture遇到了相同的错误,但必须以不同的方式解决,因为请求规范中的post不接受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
添加以下初始值设定项可以解决此问题,而不会产生包含
ActionDispatch::TestProcess::FixtureFile
模块的潜在副作用
#config/initializers/rspec.rb
模块RSpec
模块导轨
模块FixtureFileUploadSupport
类RailsFixtureFileWrapper
类更改为file_fixture后,它可以正常工作,感谢您提供的信息!我也遇到了同样的问题。您应该自己将信息写入答案,然后接受自己的答案:)也有同样的问题,但对于FactoryBot::Syntax::Default::DSL:Class
。这就是为什么所有建议的解决方案都不适合我。只需将fixture\u file\u upload替换为Rack::Test::UploadFile.new('file\u path',mime\u type)
我知道这不是最好的解决方案。但是我认为,actionpack-6.1.3/lib/action\u dispatch/testing/test\u进程中存在一些问题。rb:43
。他们应该在条件中添加self.class.respond\u to?(:file\u fixture\u path)
。哈,很有趣。感谢您提供的解决方案。5.0.0版及其修复程序现已发布。
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