Rails, shoulda 和 rspec, Column Not Null
Posted
技术标签:
【中文标题】Rails, shoulda 和 rspec, Column Not Null【英文标题】:Rails, shoulda and rspec, Column Not Null 【发布时间】:2013-05-06 11:06:26 【问题描述】:对于字段可以为空字符串但不能为空的位置,我无法通过测试。
我用这个stackeroverflow post 来获得一点帮助
但是找不到更多可以帮助我的东西。
在我的 schema.rb 文件中我看到:
t.string "CUSTID", :limit => 8, :default => "", :null => false
当我对此运行 rspec 测试时,我的验证仍然允许它为空。您能否解释一下为什么我的测试(如下)会失败?
it 'CUSTID may not be nil' do
should_not allow_value(nil).for(:CUSTID)
end
然后我在模型中单独尝试了这些验证方法。
validates :TNCUSTID, :allow_nil => false
validates :TNCUSTID, :format => :with => /^(CU)(\d6)$|(^$)/
甚至完全忽略验证
#validates :TNCUSTID, :allow_nil => false
在所有情况下,我的“不应该为零”测试用例都失败了 custid
我的最终目标是说值可以是这种格式(上面的正则表达式),可以是空字符串,但根据数据库永远不能为空。
有人能告诉我吗
【问题讨论】:
【参考方案1】:使用验证
validates :TNCUSTID, presence: true
validates :TNCUSTID, :format => :with => /^(CU)(\d6)$|(^$)/
在你的测试中
should validate_presence_of :TNCUSTID
对于电子邮件
should validate_format_of(:email).not_with('test@test').with_message(/invalid/)
来自this *** question
【讨论】:
以上是关于Rails, shoulda 和 rspec, Column Not Null的主要内容,如果未能解决你的问题,请参考以下文章
ruby Rails Rspec模型使用rspec-rails,shoulda-matcher,shoulda-callbacks和factory_girl_rails测试骨架和备忘单。差不多
ruby Rails Rspec模型使用rspec-rails,shoulda-matcher,shoulda-callbacks和factory_girl_rails测试骨架和备忘单。差不多
Rails, shoulda 和 rspec, Column Not Null
Rails无法加载shoulda-matchers 3.1.1 gem,undefined方法`allow_value'代表#