在Agile Web Development的书中,建议按如下方式进行单元测试:
assert_equal I18n.translate('activerecord.errors.messages.taken'),
product.errors[:title].join('; ')
我尝试将此用于其他错误消息,例如长度验证器too_short消息,但是获取错误:
assert_equal I18n.translate('activerecord.errors.messages.too_short', :count=>10),
product.errors[:title].join('; ')
给出:
<"translation missing: en, activerecord, errors, messages, too_short"> expected but was
<"is too short (minimum is 10 characters)">.
快速谷歌搜索建议其他人使用activerecord.errors.messages.too_short,但显然它不起作用。是否有不同的方式来访问消息,我做错了什么?
答案 0 :(得分:3)
ActiveModel处理大多数错误,因此错误消息位于errors.messages
。唯一的例外是taken
,因为唯一性验证是ActiveRecord特定的。
所以你需要:
assert_equal I18n.translate('errors.messages.too_short', :count=>10),
product.errors[:title].join('; ')
以下是消息:https://github.com/rails/rails/blob/master/activemodel/lib/active_model/locale/en.yml