【发布时间】:2013-03-15 17:10:43
【问题描述】:
使用 Rails 4.0.0beta1,我正在尝试创建一些集成测试。
我所有的网址都在我locale 的范围内(例如/en/user/new),每次我尝试调用new_user_url 时都会出现以下错误:
ActionController::UrlGenerationError: No route matches {:action=>"new", :controller=>"user"} missing required keys: [:locale]
我已经尝试了@Balint Erdi 在following question 中给出的解决方案
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 参数?
【问题讨论】:
标签: ruby-on-rails integration-testing ruby-on-rails-4