如何将 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 通常不是一个好主意。
情况
我目前正在使用 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 通常不是一个好主意。