这是我第一次在rails中测试,我遇到了麻烦,我认为应该是一个非常简单的验证。
在group_spec.rb
中it { should validate_presence_of(:enc_key) }
it { should validate_uniqueness_of(:enc_key).case_insensitive }
在我的模特中
validates :enc_key, :presence => true, uniqueness: {:case_sensitive => false}
当我运行rspec时,我正在
2) Group should require enc_key to be set
Failure/Error: it { should validate_presence_of(:enc_key) }
Expected errors to include "can't be blank" when enc_key is set to nil, got errors: ["owner There is no owner associated with this group. (nil)", "name can't be blank (nil)", "name is
too short (minimum is 4 characters) (nil)", "stripped_name can't be blank (nil)"]
错误列表是从其他验证生成的,我尝试编写自定义验证,但这也无效。
答案 0 :(得分:0)
我猜你在这里使用了shoulda匹配器,我看不出你的测试有什么问题。
我认为您应该在模型中使用validates
方法而不是validate
方法。 validates
用于声明您在此处指定的验证规则类型。 validate
用于声明自定义验证。
所以在你的模型中试试这个:
validates :enc_key, presence: true, uniqueness: {case_sensitive: false}
请参阅http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates
和http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validate
答案 1 :(得分:0)
shoulda匹配器旨在与其他有效记录一起使用。它们会更改记录的各个方面,并测试验证是否报告了相应的错误。如果记录中已经存在错误,则此方法通常不起作用。
你没有显示你的其他规范,但我收集的时间比subject
为零。您需要将subject
设置为记录的有效实例。
有关此问题的相关讨论,请参阅https://github.com/thoughtbot/shoulda-matchers/issues/365。