ruby-on-rails - 通过 default_url_options 设置区域设置以进行 Rails 测试(Rails 6 及更高版本)

标签 ruby-on-rails ruby-on-rails-6

是否有一种可靠的方法可以通过 default_url_options 全局设置 Rails 测试( Controller 和系统测试)的语言环境,而无需手动将语言环境传递给 url 帮助程序?

在 Rails 6.0.1 之前,这曾经有效:

# Set locale via default_url_options
class ActionDispatch::Routing::RouteSet
  def default_url_options(options = {})
    { locale: I18n.locale }.merge options
  end
end

最佳答案

无论如何, Controller 测试都应该尊重 ApplicationController 中设置的 default_url_options

要使用系统测试的默认区域设置,对于 Rails 6,将此代码段添加到 test_helper.rb 文件就足够了,如问题中所述:

class ActionDispatch::Routing::RouteSet
  def default_url_options(options = {})
    { locale: I18n.locale }.merge options
  end
end

对于 Rails 6.0.1 和 6.0.2,需要将这个野兽添加到 application_system_test_case.rb 文件中:

  # See actionpack/lib/action_dispatch/system_test_case.rb
  def initialize(*)
    super
    @proxy_route = if ActionDispatch.test_app
      Class.new do
        include ActionDispatch.test_app.routes.url_helpers
        include ActionDispatch.test_app.routes.mounted_helpers

        def url_options
          default_url_options.merge(host: Capybara.app_host, locale: I18n.locale)
        end
      end.new
    else
      nil
    end
  end

关于ruby-on-rails - 通过 default_url_options 设置区域设置以进行 Rails 测试(Rails 6 及更高版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59295991/

相关文章:

ruby-on-rails - 如何仅在注册时使用 rails devise 验证某些字段

ruby-on-rails - Rails MySQL ILIKE 查询

ruby-on-rails - 将 Rails 6 与 postgres 数据库一起使用时是否有理由使用字符串数据类型?

ruby-on-rails - 有没有办法在 Rails 中以编程方式查看(或打印)方法定义?

ruby-on-rails - Rails - 使用模型方法过滤 Searchkick 结果

ruby-on-rails - 在 Nokogiri 中获取属性值以提取链接 URL

ruby-on-rails - ResqueWeb 中的 Sprockets::Rails::Helper::AssetNotPrecompiled

ruby-on-rails - 在Ruby On Rails应用中创建视频?

ruby-on-rails - 如何在rails中编写Threading测试用例?