如何为本地化路由规范设置区域设置?

时间:2016-11-25 05:53:21

标签: ruby-on-rails rspec localization

我已根据Rails Guide

设置了本地化路线
#routes.rb
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
  #my resources
end

#application_controller.rb
before_action :set_locale

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end

def default_url_options
  { locale: I18n.locale }
end

但是在运行路由规范时,没有设置默认语言环境,导致错误,例如

Failure/Error: it { expect(edit_user_path(1)).to eq("/users/1/edit") }

ActionController::UrlGenerationError:
  No route matches {:action=>"edit", :controller=>"users", :id=>nil, :locale=>1} missing required keys: [:id]

经过大量谷歌搜索,我发现测试本地化路线的最佳实践很少。任何人都能指出我的好文章吗?

具体来说,我想知道:

  1. 如何为路由规范设置默认语言环境,例如 上面的示例正确设置了ID键。
  2. 是否有一种简单的方法可以测试所有允许的语言环境是否存在路由,而对于不允许的语言环境则不存在。或者这需要为每个路由规范文件添加一个循环吗?
  3. 例如,

    ['en','fr'].each do |locale|
      expect(edit_user_path(1, locale: locale)).to eq("/#{locale}/users/1/edit")
    end
    

0 个答案:

没有答案