【发布时间】:2021-10-10 10:34:03
【问题描述】:
上下文:
我们的一些 Rails 路由需要语言环境来生成 url(例如 domain.com/en/courses),而基本控制器(对于 domain.com)不使用语言环境。
我们通过在右侧控制器的default_url_options 中添加区域设置来设置它。
问题:
但是在 Rspec 中测试它时,我收到 missing required keys 错误,询问语言环境。
当我像 visit course_path(@course, locale: :en) 这样在规范中添加语言环境参数时,一切都恢复正常......但我们有很多规范!
第一次尝试:
我尝试在ActionView::TestCase::TestController 和ActionDispatch::Routing::RouteSet 中使用default_url_option 方法,就像这样
class ActionView::TestCase::TestController
def default_url_options(options = {})
{ locale: I18n.default_locale }
end
end
class ActionDispatch::Routing::RouteSet
def default_url_options(options = {})
{ locale: I18n.default_locale }
end
end
但它为整个应用设置了语言环境,而不仅仅是一些特定的路线......
问题:
有没有办法在 rspec 支持中为 some 路由设置默认参数?
【问题讨论】:
-
是否有您计划应用的命名空间、约定或标记来区分您需要默认参数的那些路由?这可能会影响所使用的策略。
-
@stringsn88keys ,是的:为了清楚起见,我简化了路由,但所有本地化路由都在同一个 'dashboard` 命名空间中,所以它实际上是
domain.com/en/dashboard/courses例如 -
stub
default_url_options怎么样在测试用例上返回{ locale: locale_you_want}来测试some routes,所以它只对那些测试用例有效。
标签: ruby-on-rails ruby rspec rspec-rails