如何测试ActiveRecord中哪些验证失败?
我有这样的模型:
class User < ActiveRecord::Base
validates_length_of :name, :in => (2..5)
end
我想测试一下这个验证:
it "should not allow too short name" do
u = User.new(:name => "a")
u.valid?
u.should have(1).error_on(:name)
end
但是它没有测试name
上设置了哪种错误。我想知道,如果它是too_short
,too_long
,或者其他一些验证失败了。
我可以在errors数组中查找消息文本,如下所示:
u.errors[:name].should include(I18n.t("activerecord.errors.models.user.attributes.name.too_short"))
但是当我在语言环境文件中设置activerecord.errors.messages.too_short
而不是特定于模型的消息时,这将失败。
那么,是否可以检查出现了哪种错误?
没有找到相关结果
已邀请:
4 个回复
寿柬窟年
:
请注意,对于参数化的验证(例如
),您还需要传递参数的值。
错误由他们的i18n密钥识别。您可以找到相应的密钥,以便在相应的Rails i18n文件中查找错误部分下的任何语言。 你可以问的其他一些漂亮的问题
是
和
,以及你可以问的任何事情
。
破弯
然后你可以这样测试:
结乳
钾涎净介
我使用正则表达式来匹配异常消息,因为异常消息中可能有许多验证消息,但我们希望确保它包含与名称太短相关的特定代码段。 这种方法确实将您的断言与验证消息相结合,因此如果您每次修改验证消息,您可能也需要修改您的规范。总的来说,这是断言验证正在完成其工作的一种简单方法。