【发布时间】:2019-01-31 21:22:55
【问题描述】:
我正在尝试在 Rails 5.2 应用程序中使用 RSpec 3.7 测试文件上传,我见过的最简单的建议(几个地方,including this SO post)是使用fixture_file_upload - 看起来很棒,除了它似乎在我的应用程序中不可用,我不知道为什么。
我唯一能想到的是我们的应用程序没有使用 ActiveRecord,它使用的是 MongoID。但是不应该要求 ActiveRecord 使用这些方法……它们完全不相关。 Rails 5 中是否还有我缺少的另一个新的“ActiveSomething”库? (此应用是从 Rails 4 应用升级而来的...)
为了更具体地解释我的问题,我试着把:
let(:file) { fixture_file_upload('invalid_csv.csv') }
在我的一种情况下,它引发了一个异常:
undefined local variable or method 'fixture_path' for #<RSpec::ExampleGroups::...>
我尝试定义config.file_fixture_pathas outlined here,但这引发了它自己的异常:
undefined method `file_fixture_path=' for #<RSpec::Core::Configuration::...>
这真的有效吗?显然我错过了什么......
【问题讨论】:
-
在 RSpec.configure 中更改
config.fixture_path = "#{Rails.root}/xxx/xxx"怎么样? -
我也试过了,我得到了同样的错误“未定义的方法
fixture_path=用于 <:core::configuration...>” -
你有没有想过这个问题?我最终编写了自己的
fixture_file_upload助手,它只是Rack::Test::UploadedFile.new(Rails.root.join("spec/fixtures/#{path}"), mime, true)。这似乎是一件荒谬的事情,但它在 Rails6 中工作,让我继续升级,所以...... -
我不认为我想通了,不。我想我只是使用了这样的解决方法。但是,它似乎应该是 Rails 6 中 ActionDispatch::TestProcess::FixtureFile 的一部分:apidock.com/rails/ActionDispatch/TestProcess/FixtureFile/…
-
自从我从 Rails 6.0 升级到 Rails 6.1 后,我遇到了同样的问题。通过使用上面提到的
Rack::Test::UploadedFile.new(Rails.root.join("spec/fixtures/#{path}"), mime, true)解决了我的问题。
标签: ruby-on-rails rspec ruby-on-rails-5 rspec-rails