功能测试未将 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
我正在尝试在应用程序上设置功能测试。 我决定安装 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