【发布时间】:2011-09-13 22:53:25
【问题描述】:
我一直在学习railstutorial.org 上的教程,但我对作者在 6.2.1 验证存在部分的代码感到有些困惑。
在用户模型中,教程添加了validates :name, :presence => true。很简单。
作者选择写rspec测试的时候,做了一件我觉得有点奇怪的事情。
describe User do
before(:each) do
@attr = { :name => "Example User", :email => "user@example.com" }
end
.
.
.
it "should require a name" do
no_name_user = User.new(@attr.merge(:name => ""))
no_name_user.should_not be_valid
end
end
当人们可以摆脱 :each 块语句并简单地编写时,为什么还要麻烦地将一个空白字符串合并到 @attr:
it "should require a name" do
no_name_user = User.new(:name => "", :email => "user@example.com")
no_name_user.should_not be_valid
end
我知道作者也使用@attr 变量来验证电子邮件地址的存在,这也是他使用块语句的原因之一——对我来说,遵循以下结构更有意义第二个块引用。不过,我有一种感觉,我在这里缺少一些东西。
我想到的另一种解释是,当需要输入很多键时,使用@attr 结构会有所帮助,而不是仅使用姓名和电子邮件的这种相当简单的情况。
有人有意见吗?
【问题讨论】:
标签: ruby-on-rails tdd rspec-rails