功能测试未将 REQUEST_URI 传递给具有 RSpec 和 Capybara 的中间件

Feature tests not passing REQUEST_URI to a middleware with RSpec and Capybara

我正在尝试在应用程序上设置功能测试。 我决定安装 Capybara,因此将它添加到我项目的 Gemfile 中:

group :test do
  gem "capybara"
end

我在 spec/feature 文件夹中声明我的测试,测试成功执行:

require "rails_helper"

feature 'My Feature' do
  scenario 'User visits feature page' do
    visit '/my-feature'
    expect(page).to have_text('Stuff')    
  end
end

问题:我有一个 URL 中间件没有检测到 env['REQUEST_URI] 标志,因此我的测试失败了:

class UrlNormalizationMiddleware

  def initialize(app)
    @app = app
  end


  def call(env)
    uri_items = env['REQUEST_URI'].split('?')
    ...
    @app.call(env)
  end
end

实际应用程序加载并在 env['REQUEST_URI'] 上传递值,但不会在测试环境中加载。

我还需要设置什么吗?

谢谢!

REQUEST_URI 不是机架规范的一部分,这意味着它不能保证被设置,你不应该在你的中间件中使用它。相反,您应该使用机架规格中指定的 PATH_INFO、QUERY_STRING 等,因此应该可用 - https://github.com/rack/rack/blob/master/SPEC