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

时间:2018-12-27 00:21:43

标签: ruby-on-rails ruby rspec 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']上传递值,但不在测试环境上传递值。

我还需要设置什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

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