ruby-on-rails - 为某些 rspec 请求设置默认参数
问题描述
语境:
我们的一些 Rails 路由需要语言环境来生成 url(例如domain.com/en/courses
),而基本控制器(for domain.com
)不使用语言环境。default_url_options
我们通过在正确的控制器中添加语言环境来设置它。
问题:
但是在 Rspec 中测试它时,我收到一个missing required keys
询问语言环境的错误。当我在规范中添加语言环境参数时,visit course_path(@course, locale: :en)
一切都恢复正常......但我们有很多规范!
第一次尝试:
我尝试使用这种default_url_option
方法ActionView::TestCase::TestController
,ActionDispatch::Routing::RouteSet
就像这样
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 支持中的某些路由设置默认参数?
解决方案
第一个解决方案
在应用程序控制器上
if Rails.env.test?
before_action :set_default_locale
private
def set_default_locale
I18n.locale = params.fetch(:locale, :en)
end
end
我知道这不是正确的方法
它不会在 rspec 级别更新您的应用程序,但到目前为止,这是我能想到的
第二种替代解决方案
路线级别更新
if Rails.env.test?
defaults = { locale: :en }
else
defaults = {}
end
scope "(:locale)", :locale => /en|id/, :defaults => defaults do
推荐阅读
- linux - 用 bluealsa 连接到树莓派的蓝牙扬声器烦躁地睡着了
- python-2.7 - 如何从日期时间中删除时区?
- javascript - splitChunks.chunks 和 splitChunks.test (webpack) 之间的区别
- python - df.dropna() 不工作,仍然出现在数据框中
- javascript - 为什么我的最小和最大日期设置在我的日期选择器中不起作用?
- macos - 我正在尝试使用 Visual Studio Code 运行 fortran 代码。不知道如何运行代码
- django - 请求期间丢失的内容长度标头(django)
- c# - 使用 C# 从 Sharepoint 列表中提取数据到 SQL Server 表
- python - Twilio 收集我如何告诉收集在语音开始之前等待一段时间并开始收集
- c# - 打开时表单重复