首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Railstutorial.org验证状态测试

Railstutorial.org验证状态测试
EN

Stack Overflow用户
提问于 2011-09-14 06:53:26
回答 2查看 132关注 0票数 2

我一直在学习railstutorial.org的教程,我被作者的代码搞糊涂了-- 6.2.1验证状态。

在用户模型中,本教程添加了validates :name, :presence => true。很简单。

当作者选择编写rspec测试时,他会做一些我认为有点奇怪的事情。

代码语言:javascript
复制
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 block语句并简单地写下时,为什么要不厌其烦地将一个空白字符串合并到@attr

代码语言:javascript
复制
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变量来验证电子邮件地址的存在,这是他使用block语句的原因之一--对我来说,遵循第二个block引号的结构更有意义。尽管如此,我还是有一种感觉,我在这里遗漏了什么。

我脑海中浮现的另一种解释是,当有很多键需要输入时,使用@attr结构很有帮助,而不是这种只有姓名和电子邮件的简单情况。

有人有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-14 07:23:42

所以有一个标准的属性映射可以在所有的测试中使用。当一个测试要求一个值不在那里时,它会被删除。

就我个人而言,我不相信这是值得的,因为它有点混淆了事情(如您所发现的),但它就是这样。

票数 1
EN

Stack Overflow用户

发布于 2011-09-15 05:28:17

重点是在测试中只有与测试用例相关的代码。在测试没有名字的用户是否有效时,唯一相关的属性是name属性。该测试应该不需要知道任何关于电子邮件属性的信息。

比方说,你添加了一个新字段的验证--你必须更新你在没有该字段的情况下建立用户的每一个测试。使用顶部的attr散列,您只需在其中弹出新字段,您的所有测试都是正常的。

创建用于测试的对象是一个很常见的问题,有很多解决方案,并且有很多关于哪种方法是最好的讨论。我建议你去工厂看看。Machinist和FactoryGirl是两个可以很好地使用Rails的替代方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7409498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档