2013-05-06 42 views
1

我无法让我的测试通过字段可以为空字符串但不能为空的地方。Rails,shoulda和rspec,Column Not Null

我用这个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)(\d{6})$|(^$)/ } 

,甚至离开验证了完全

#validates :TNCUSTID, :allow_nil => false 

在所有情况下我“不应该是零”的测试案例失败的客户ID


我的最终目标是说,该值可以是这种格式(上面的正则表达式),可以是空字符串,但根据数据库不能为空。

可有人请赐教

回答

1

使用验证

validates :TNCUSTID, presence: true 
validates :TNCUSTID, :format => {:with => /^(CU)(\d{6})$|(^$)/ } 

而且在测试中

should validate_presence_of :TNCUSTID 

而对于电子邮件

should validate_format_of(:email).not_with('[email protected]').with_message(/invalid/) 

this StackOverflow question

相关问题