【问题标题】:Feature tests not passing REQUEST_URI to a middleware with RSpec and Capybara功能测试未将 REQUEST_URI 传递给带有 RSpec 和 Capybara 的中间件
【发布时间】:2018-12-27 00:21:43
【问题描述】:

我正在尝试在应用程序上设置功能测试。 我决定安装 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 环境变量的值?如果您假设驱动程序会设置,那么我需要知道您与 Capybara 一起使用的驱动程序。 rack-test 特别没有设置 REQUEST_URI,因为它没有在机架标准中定义 - 请参阅 github.com/rack-test/rack-test/issues/26
  • 我实际上并没有设置它,我读过类似的东西。这意味着我需要在某个地方设置它,对吗?我应该在测试中创建一个存根来设置它吗?我怎么知道我在 Capybara 上使用的是哪个驱动程序?老实说,我刚刚安装了 capybara 并像往常一样继续使用 rspecs。如果我遗漏了什么,请告诉我(如果这是问题,请确保您回答,以便我将您的答案标记为正确)。

标签: ruby-on-rails ruby rspec capybara


【解决方案1】:

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

【讨论】:

  • 感谢您的回复。我不太确定是否使用这种方法,因为我不想在任何地方更改 env['REQUEST_URI'] 值,但事实证明它只在两个实例上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多