如何在Rails中将Rack Middleware添加到测试环境中?

时间:2015-12-28 19:04:25

标签: ruby-on-rails capybara rack middleware livereload

情况

我目前正在使用Capybara测试Rails应用。此外,我正在使用Guard及其扩展名guard-livereload,以便在相关源文件发生更改后自动重新加载我的浏览器。

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

现在,由于LiveReload在开发过程中像魅力一样,我想在功能测试期间使用它来自动重新加载/public/capybara.html,而不是一遍又一遍地打开它。

问题

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

/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 Way TM 。 那么,我该如何解决这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我认为您应该在Rack::LiveReload内的测试环境中加入Gemfile

group :development, :test do
  gem "rack-livereload"
end

答案 1 :(得分:1)

在您的Gemfile中,您可能只在开发组中加载了rack-livereload gem - 为此,您需要在开发和测试组中加载它。话虽这么说,你真的希望你的测试环境尽可能地模仿生产,所以在测试环境中运行rack-livereload通常是个坏主意。