我目前正在使用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 。 那么,我该如何解决这个问题?
提前致谢。
答案 0 :(得分:1)
我认为您应该在Rack::LiveReload
内的测试环境中加入Gemfile
:
group :development, :test do
gem "rack-livereload"
end
答案 1 :(得分:1)
在您的Gemfile中,您可能只在开发组中加载了rack-livereload gem - 为此,您需要在开发和测试组中加载它。话虽这么说,你真的希望你的测试环境尽可能地模仿生产,所以在测试环境中运行rack-livereload通常是个坏主意。