2014-09-25 70 views
1

我的驗證可以確保必填字段只能設置爲ARRSpec如何測試空白/空字符串以進行包含驗證?

在型號:

validates :status_code, inclusion: { in: %w(A R) } 

在RSpec的,我有以下規格:

it { expect(@car).to allow_value("A", "R").for(:status_code) } 
it { expect(@car).to_not allow_value(nil, "").for(:status_code) } 

的第一次RSpec通過,但第二次出現錯誤:

Failure/Error: it { expect(@car).to_not allow_value(nil, "").for(:status_code) } 
     Expected errors when status_code is set to "", got no errors 

我錯過了什麼?我正在使用RSpec 3.1。

回答

2

內置驗證程序接受布爾選項:allow_blank:allow_nil來控制當值是其中的一個時它應該如何表現。試試這個:

validates :status_code, inclusion: { in: %w(A R), allow_blank: false, allow_nil: false } 

它很可能還努力增加存在驗證處理零和空字符串:

validates :status_code, inclusion: { in: %w(A R) }, presence: true 
+0

感謝您的反饋!如果這是在內置驗證器中包含布爾選項的情況,那麼我的模型驗證器不應該爲「一致性」包含'allow_blank:false,allow_nil:false'(儘管包括這些是多餘的)。或者,如果我確實包含'allow_blank:false,allow_nil:false',驗證基本上會因'包含'而變得良性。有些東西似乎不對。我期待着您的回覆。 – user1322092 2014-09-25 16:14:14

+0

更新了另一個可能的解決方案。 – 2014-09-25 21:02:57

+0

謝謝吉米。既不驗證工作。我認爲這是一個Rspec的錯誤。如果我用'c'然後'c = Car.first'然後'c.status_code ='''然後'c.valid?'然後'c.errors.full_messages'並且我得到'[「狀態碼不包含在列表「]' – user1322092 2014-09-25 22:52:08