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