2013-04-20 103 views
1

我剛開始使用RSpec和Shoulda-matchers,我認爲這裏出了問題。Validate_presence_of測試通過時它不應該?

在我的模型中,我有一個像這樣驗證的成員displayname。

validates :displayname, :presence => false #just for this test. 

在我的天賦,我寫了這個

it { should validate_presence_of(:displayname) } 

然而,它的傳球。除非我切換不應該失敗,否則不應該?

編輯:它似乎只是表現得像我說的驗證存在,無論我說的是真還是假。我將其更改爲should_not並開始失敗,除非我完全刪除了存在檢查。驗證存在的行爲是不是使用你傳遞它的任何布爾值?

回答

1

是的,你是對的。您可以將任何隨機值傳遞給:存在驗證中的關鍵。這意味着即使您添加了以下任何一項,也會發生在場驗證

  1. 驗證:姓名,:存在=>假
  2. 驗證:姓名,:存在=>真
  3. 驗證:姓名,:存在=> '隨機'
  4. 驗證:姓名,:存在=>零

(也許更可讀上述驗證方法的版本,validates_presence_of:attr_name,不會引起任何這樣的困惑)

0

我想你的測試數據庫沒有反映實際的模式。確保每次運行更改數據庫的遷移時都更新測試數據庫。

rake db:test:prepare

此外,如果你正在運行叉勺,請確保您已經停止,並開始再次它重新加載所有的東西。

+0

沒有改變任何東西。看到我的編輯更多細節,但它似乎只是忽略了布爾我通過驗證存在,只是總是期待它在那裏。 – bdwain 2013-04-20 11:29:12

1

validates_presence_of在shoulda-matchers中的匹配器不會驗證該字段是否有價值。它只驗證模型是否存在對其上聲明的屬性的驗證。如果你擔心驗證是否真的起作用,那麼你需要更多的測試。

這就是爲什麼當您將斷言從should更改爲should_not時,測試開始失敗。

相關問題