使用rspec验证状态

时间:2013-12-06 10:56:53

标签: ruby-on-rails rspec

这是我第一次在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)"]

错误列表是从其他验证生成的,我尝试编写自定义验证,但这也无效。

2 个答案:

答案 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