1

使用 Rails 4.0.0beta1,我正在尝试创建一些集成测试。我所有的 URL 都在我的范围内locale(例如/en/user/new),每次我尝试调用时都会出现以下错误new_user_url

ActionController::UrlGenerationError: No route matches {:action=>"new", :controller=>"user"} missing required keys: [:locale]

我已经尝试了@Balint Erdi 在以下问题中给出的解决方案

class ActionController::Integration::Session
  def url_for_with_default_locale(options)
    options = { locale: I18n.locale }.merge(options)
    url_for_without_default_locale(options)
  end

  alias_method_chain :url_for, :default_locale
end

它有效,但由于 rails4 给了我一个弃用警告:

DEPRECATION WARNING: ActionController::Integration is deprecated and will be removed, use ActionDispatch::Integration instead. (called from <top (required)> at /path/to/project/test/test_helper.rb:46)
DEPRECATION WARNING: ActionController::IntegrationTest is deprecated and will be removed, use ActionDispatch::IntegrationTest instead. (called from <top (required)> at /path/to/project/test/test_helper.rb:46)

对于我的控制器测试,我添加了这个:

class ActionController::TestCase

  module Behavior
    def process_with_default_locale(action, http_method = 'GET', parameters = nil, session = nil, flash = nil)
      parameters = { locale: I18n.locale }.merge( parameters || {} ) 
      process_without_default_locale(action, http_method, parameters, session, flash)
    end

    alias_method_chain :process, :default_locale
  end 
end

我还测试了将default_url_options方法直接添加到测试中,但它不起作用。

如何在集成测试中设置默认 url 参数?

4

3 回答 3

4

对我有用的一个选项(至少在 Rails 4.2.0 中)是ActionDispatch::IntegrationTest在我的类中添加一个 setup 方法test/test_helper.rb

class ActionDispatch::IntegrationTest
  def setup
    self.default_url_options = { locale: I18n.default_locale }
  end
end
于 2015-01-28T04:26:01.290 回答
1

好的,看起来就像替换ActionControllerActionDispatch. 我不知道为什么它以前不起作用,但自从我更新到最新的 rails 后,它不赞成rake test:integrationrails test integration似乎起作用:

class ActionDispatch::Integration::Session
  def url_for_with_default_locale(options)
    options = { locale: I18n.locale }.merge(options)
    url_for_without_default_locale(options)
  end

  alias_method_chain :url_for, :default_locale
end
于 2013-03-18T11:04:46.027 回答
0

Rails 5,Minitest 示例:

class SomeTest < ActionDispatch::IntegrationTest
  setup do
    self.default_url_options = { locale: I18n.default_locale }
  end

  def test_something
    ...
  end
end
于 2019-06-16T18:19:28.583 回答