【发布时间】:2010-10-20 05:09:44
【问题描述】:
您好,我有一个用户模型,其中包含我需要进入的许多属性和验证。 我想使用测试驱动开发来开发我的应用程序,但是很难编写简单的验证测试,例如没有空白电子邮件、唯一电子邮件、正确的电子邮件地址。
那么开始编写测试的最佳方式是什么?
【问题讨论】:
标签: ruby-on-rails unit-testing
您好,我有一个用户模型,其中包含我需要进入的许多属性和验证。 我想使用测试驱动开发来开发我的应用程序,但是很难编写简单的验证测试,例如没有空白电子邮件、唯一电子邮件、正确的电子邮件地址。
那么开始编写测试的最佳方式是什么?
【问题讨论】:
标签: ruby-on-rails unit-testing
应该 (http://github.com/thoughtbot/shoulda/wiki/Usage) 将允许轻松检查此类 ActiveRecord 检查。
should_not_allow_values_for :email, "blah", "b lah"
should_allow_values_for :email, "a@b.com", "asdf@asdf.com"
代码的作用相当清楚,并且包含一些类似这样的有用检查。
【讨论】:
创建一个有效属性的散列,它将成功创建您希望测试的类型的对象。这通常在之前的步骤中完成一次。然后,为每个要检查验证的属性创建一个类似这样的测试(使用 rSpec 语法):
obj_under_test = MyModel.new(@valid_attributes)
object_under_test.email = nil
obj_under_test.should_not be_valid
在这种情况下,@valid_attributes 是您创建的哈希值。另一种方法是使用合理的工厂为每个测试生成对象。查看 FactoryGirl、Machinist、Fixjour 中的一些示例。所以使用你的例子,这样的事情是有道理的:
您可以将测试/规范提高到您喜欢的粒度级别。许多人喜欢每个案例只测试一件事(或“示例”,用 BDD 的话来说)。因此,您可能会进行大量测试,例如“应该提供电子邮件”、“如果提供了电子邮件,则应该提供有效的电子邮件”、“应该在有效域中提供电子邮件”等。
【讨论】: