如何将 Rack 中间件添加到 Rails 中的测试环境?

How can I add Rack Middleware to the test environment in Rails?

情况

我目前正在使用 Capybara. In addition, I was using Guard with its extension guard-livereload 测试一个 Rails 应用程序,以便在相关源文件更改后立即自动重新加载我的浏览器。

由于 Capybara 的 save_and_open_page 方法没有正确显示样式表,我应用 this solution 解决这个问题,其中一个临时视图转储 capybara.html 被放置在 /public/ 文件夹以确保资产的可访问性。

现在,由于 LiveReload 在开发过程中发挥了巨大的作用,我想在功能测试期间使用它来自动重新加载 /public/capybara.html 而不是自己一遍又一遍地打开它。

问题

出于某种原因,我只能将负责重新加载页面的Rack中间件插入到开发环境中的中间件堆栈中,而不是在测试环境中。我使用以下代码进行插入:

/config/environments/development.rb

Rails.application.configure do

  config.middleware.insert_after ActionDispatch::Static, Rack::LiveReload

end

/config/environments/test.rb中使用同样的方法时,出现如下错误

myApp/config/environments/test.rb:44:in `block in <top (required)>': uninitialized constant Rack::LiveReload (NameError)

由于我对 Rails 还是比较陌生,所以我真的不知道从哪里开始。据我所知,尝试手动请求文件并不是 The Rails WayTM 。 那么,我该如何解决这个问题呢?

提前致谢。

我相信您应该在 Gemfile:

中的测试环境中包含 Rack::LiveReload
group :development, :test do
  gem "rack-livereload"
end

在您的 Gemfile 中,您可能只在开发组中加载 rack-livereload gem -- 为此,您需要在开发组和测试组中加载它。话虽如此,您确实希望您的测试环境尽可能地模拟生产环境,因此在测试环境中 运行 rack-livereload 通常不是一个好主意。