2016-09-06 152 views
0

我努力學習rspec的和已經遇到了一個問題,我想測試我的車型之一的唯一性驗證,但測試不停地進行故障即使我敢肯定它應該通過。測試驗證的唯一

這裏是我的測試:

context "two products with the same title" do 
    Given{FactoryGirl.build(:product, title: "Hello test title")} 
    Given(:post2){FactoryGirl.build(:product, title: "Hello test title")} 
    Then{post2.invalid?} 
    end 

,這裏是我的驗證:

validates :title, uniqueness: true 

但是當我運行測試它回來失敗,我不知道爲什麼?

任何幫助將是巨大的!

+0

哪裏是唯一的驗證?您只是驗證標題的最小長度。 –

回答

1

您需要添加的唯一性驗證的title

validates :title, uniqueness: true 

,你也必須create第一product不僅僅是build

context "two products with the same title" do 
    Given{FactoryGirl.create(:product, title: "Hello test title")} 
    Given(:post2){FactoryGirl.build(:product, title: "Hello test title")} 
    Then{post2.invalid?} 
end 

這將創建一個產品,title = "Hello test title"

與第二個產品相同title產品將invalid

+0

抱歉,我有「驗證:標題,獨特性:真實的」我只抄錯行 – user2320239

+0

還是你需要改變 –

+0

你需要創建的,而不是打造的第一款產品 –

0

您應該使用像早該-的匹配寶石測試這樣的測試:https://github.com/thoughtbot/shoulda-matchers 它將爲您節省大量的時間,它會幹你的測試(因爲它們都是相同的)

關於你的測試,我不知道什麼是你想要的目的。你沒有驗證唯一性,只有產品的長度。對於添加獨特您添加到您的產品型號:

validates :title, uniqueness: true 

,使測試時,你應該創建(而不是構建)你的第一個產品。基本上,除非您的產品存儲在數據庫中,否則您的產品將是有效的,因爲它不存在(但是)任何其他產品。

+0

抱歉,我確實有只會驗證:標題,獨特性:真實,我只是抄錯行 – user2320239

+0

常見錯誤;)我仍然強烈建議你使用寶石 – hcarreras