【发布时间】:2012-01-04 05:46:28
【问题描述】:
在 Ruby on Rails 3 教程 的 6.2.4 节中,Michael Hartl 描述了关于检查电子邮件地址唯一性的警告:如果两个相同的请求及时接近,则请求 A 可以通过验证,然后B 通过验证,然后 A 被保存,然后 B 被保存,你得到两个具有相同值的记录。每个在检查时都是有效的。
我的问题是关于解决方案的不是(在数据库上设置唯一约束,因此 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 测试框架吗?
【问题讨论】:
-
顺便说一句,这是一个很好的第一个问题。
标签: ruby-on-rails rspec rspec-rails railstutorial.org