Michael Hartl在 Ruby on Rails 3教程的第6.2.4節中描述了一個關於檢查電子郵件地址唯一性的警告:如果兩個相同的請求及時接近,則請求A可以通過驗證,然後B通過驗證,然後A得到保存,然後B得到保存,並獲得兩個具有相同值的記錄。每次檢查時都是有效的。Railstutorial.org驗證唯一的電子郵件
我的問題是不是關於解決方案(在數據庫上放一個唯一的約束,所以B的保存將不起作用)。這是關於寫一個測試來證明解決方案的工作原理。我嘗試寫我自己的,但無論我想出什麼,只是模仿常規,簡單的唯一性測試。
完全被新rspec的,我天真的做法是隻寫場景:
it 'should reject duplicate email addresses with caveat' do
A = User.new(@attr)
A.should be_valid # always valid
B = User.new(@attr)
B.should be_valid # always valid, as expected
A.save.should == true # save always works fine
B.save.should == false # this is the problem case
# B.should_not be_valid # ...same results as "save.should"
end
但這種測試通過/失敗完全相同的情況下,作爲常規唯一性檢查;我的代碼寫入時會通過B.save.should == false
,以便常規唯一性測試通過,並且在常規測試失敗時失敗。
所以我的問題是「我怎麼寫一個rspec測試來驗證我正在解決這個問題?」如果答案結果是「這很複雜」,我應該看看是否有不同的Rails測試框架?
這是一個很好的第一個問題BTW。 – 2012-01-04 06:24:00