我已经开始了我在 Rails 中使用 TDD 的旅程,并且遇到了一个关于模型验证测试的小问题,我似乎无法找到解决方案。假设我有一个用户模型,
class User < ActiveRecord::Base
validates :username, :presence => true
end
和一个简单的测试
it "should require a username" do
User.new(:username => "").should_not be_valid
end
这正确地测试了存在验证,但如果我想更具体怎么办?例如,在错误对象上测试 full_messages..
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
我对最初尝试(使用 should_not be_valid)的担忧是 RSpec 不会产生描述性错误消息。它只是说“预期有效?返回假,得到真”。但是,第二个测试示例有一个小缺点:它使用 create 方法而不是 new 方法来获取错误对象。
我希望我的测试更具体地说明他们正在测试什么,但同时不必接触数据库。
有人有意见吗?