是否应在rails中测试本机验证?

Ric*_*ras 11 validation unit-testing ruby-on-rails

大家都知道自动化测试是件好事.

不是每个人都知道要测试什么.

我的问题是,是否应在应用程序中测试validate_presence_of,validate_uniqueness_of等本机验证.

在我的办公室,我们三个人,一个人认为应该进行测试,一个人认为不应该这样,我在空中.

Ste*_*eet 20

是.

测试模型属性是否存在仅测试validates_presence_of代码作为真实测试的副产品,即模型中存在validates_presence_of.

如果有人注释掉了一堆验证码,然后忘记取消注释,那么这将无法检测到,并可能导致各种问题.

我测试它们,不是因为我认为它们不起作用,而是确保它们在需要时出现在我的模型中.

  • >我测试它们,不是因为我认为它们不起作用,而是确保它们在需要时存在于我的模型中 (3认同)

Mic*_*rdt 5

您是否还打算为每个 Ruby 运算符和 API 方法编写单元测试?

你的单元测试应该测试你自己的代码,而不是其他人的——这是他们的工作,为什么要重复他们的工作?如果你不相信他们能很好地完成他们的工作,你为什么要使用他们的代码?

  • 单元测试有两个(主要)目标。一个是确保实施是健全的,但更重要的是第二个:确保当实施改变时行为不会改变。 (2认同)

Jef*_*ire 5

马修·巴斯(Matthew Bass)有一个很棒的宝石,他就是为这种类型的东西而发布的。它添加了 rspec 匹配器,用于检查以确保验证到位,而无需实际运行底层 ActiveRecord 代码。 在此处阅读更多相关信息

它为验证添加了匹配器:

it_should_validate_presence_of     :first_name, :last_name, :email
it_should_validate_numericality_of :zip
it_should_validate_uniqueness_of   :email
it_should_validate_inclusion_of    :gender, :in => %w(Male Female)
Run Code Online (Sandbox Code Playgroud)

还有关联的匹配器:

it_should_belong_to :employer
it_should_have_many :friends, :romans, :countrymen
it_should_have_one  :account
it_should_have_and_belong_to_many :comments
Run Code Online (Sandbox Code Playgroud)

以及其他一些有用的补充:

# tests that User.count increases by 1
it_should_be_createable :with => {:first_name => 'Ed', :last_name => 'The Duck', :email => 'a@b.com'}

# tests that the attribute is protected
it_should_protect :email
Run Code Online (Sandbox Code Playgroud)

这绝不是一个详尽的清单。我有一个叉子,我在其中添加了一些我需要的其他东西,可能还有其他东西漂浮在周围。这是一个很好的方法,对我来说,在确保验证仍在模型中和必须显式编写测试以执行 ActiveRecord 代码以确保它之间符合中间立场。