【问题标题】:Why is fixture_file_upload not available in RSpec (without ActiveRecord)?为什么 Fixture_file_upload 在 RSpec 中不可用(没有 ActiveRecord)?
【发布时间】: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


【解决方案1】:

我已经通过在 RSpec 配置块中包含他们的模块来解决这个问题:

RSpec.configure do |config|
  #...
  config.include ActionDispatch::TestProcess::FixtureFile
  #...
end

【讨论】:

  • 不错!我现在无法测试,但如果其他人可以确认它也适用于他们,我会将其标记为正确 :)
  • 对我不起作用,从 6.0 升级到 6.1
【解决方案2】:

这对我有用

Rack::Test::UploadedFile.new(Rails.root.join("spec/fixtures/doc.pdf"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2012-02-19
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多