【问题标题】:How can I add Rack Middleware to the test environment in Rails?如何将 Rack Middleware 添加到 Rails 的测试环境中?
【发布时间】:2015-12-28 19:04:25
【问题描述】:

情况

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

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

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

问题

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

/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 还很陌生,所以我真的不知道从哪里开始。据我所知,尝试手动要求文件并不是真正的 Rails WayTM 。 那么,我该如何解决这个问题呢?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 好点。当我完成测试时,我一定会考虑它。
    【解决方案2】:

    我相信您应该在Gemfile 内的测试环境中包含Rack::LiveReload

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

    【讨论】:

    • 感谢您的快速解决方案。
    猜你喜欢
    • 2012-02-17
    • 2010-10-25
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多