2011-11-08 172 views
2

我想寫一個RSpec測試,如果不同的身份具有相同的值(檢查的唯一性提供商和id)

這裏,將檢測Rspec的測試是我工作的測試。我只是種撒了一些廢話到它,因爲我越來越絕望......的唯一性/重複值

context "no duplicate values should exist" do 
    identity1 = subject { Factory.create(:valid_identity) } 
    it { should be_valid } 
    identity2 = identity1 
    it { should validate_uniqueness_of(:id) } 
    it { should have(1).error_on(:id) } 
    it { should validate_uniqueness_of(:provider) } 
    it { should have(1).error_on(:provider) } 

end 


爲了讓你我已經習慣了結構的想法,我已經寫了基本測試,如下面的一個如果可能的話,我想堅持到同類型的結構

context "when created without a name" do 
    subject { Brand.create Factory.build(:valid_brand, :name => nil).attributes } 
    it { should be_invalid } 
    it { should have(1).error_on(:name) } 
    specify { subject.errors[:name].should include "can't be blank" } 
end 

我的身份廠是這樣的:

Factory.define :valid_identity, :class => Identity do |identity| 
    identity.participant {|participant| participant.association(:valid_participant) } 
    identity.provider "twitter" 
    identity.extid '11111' 
end 

任何幫助表示讚賞!

回答

0

你想要的行爲是:當我創建一個新的對象,並且我已經有一個對象在數據庫中的相同的提供者/ id比必須新對象無效。

在僞代碼,這意味着:

# 1. create a totally valid object and save it in the database 
obj1 = create_valid_object_and_save_it 
# 2. we need a second object that's totally valid when obj1 exists 
obj2 = create_second_valid_object_dont_save_it 
# 3. we make the bad condition 
obj2.provider = obj1.provider 
# 4. now comes the actualy test, obj2 must not be valid! 
assert ! obj2.valid? 

如果你想測試驗證,總是從一個有效的對象開始,改變你想成爲什麼樣無效。這樣你就可以確保你的測試將來不會失敗。

相關問題