【问题标题】:How should I test a model with a lot of attributes and validations in Ruby on Rails?我应该如何在 Ruby on Rails 中测试具有大量属性和验证的模型?
【发布时间】:2010-10-20 05:09:44
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails unit-testing


    【解决方案1】:

    应该 (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" 
    

    代码的作用相当清楚,并且包含一些类似这样的有用检查。

    【讨论】:

    • 我赞成将 shoulda 用于此目的 :) 它为此类事情提供了一整套简单明了的“宏” - 使基础测试变得非常简单。
    【解决方案2】:

    创建一个有效属性的散列,它将成功创建您希望测试的类型的对象。这通常在之前的步骤中完成一次。然后,为每个要检查验证的属性创建一个类似这样的测试(使用 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 的话来说)。因此,您可能会进行大量测试,例如“应该提供电子邮件”、“如果提供了电子邮件,则应该提供有效的电子邮件”、“应该在有效域中提供电子邮件”等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2014-12-04
      相关资源
      最近更新 更多