我应该如何在Ruby on Rails中测试具有大量属性和验证的模型?

时间:2010-10-20 05:09:44

标签: ruby-on-rails unit-testing

您好我有一个用户模型,其中包含许多我需要进行的属性和验证。 我想使用测试驱动开发来开发我的应用程序,但我很难编写简单的验证测试,例如没有空白电子邮件,独特的电子邮件,正确的电子邮件地址。

那么开始编写测试的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

Shoulda(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" 

它非常清楚代码的作用,它包括一些有用的检查。

答案 1 :(得分:0)

创建有效属性的哈希,这些哈希将成功创建您要测试的类型的对象。这通常在前一步骤中完成一次。然后,对于要检查验证的每个属性,创建一个类似于此的测试类型(使用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说法)。因此,您可能会拥有一系列测试,例如“应该提供电子邮件”,“如果提供了电子邮件,则应该有一封有效的电子邮件”,“应该在有效域中发送电子邮件”等等。