ruby-on-rails – Rails:Test :: Unit为什么在任何其他断言之前我需要断言某些内容是有效还是无效

ruby-on-rails – Rails:Test :: Unit为什么在任何其他断言之前我需要断言某些内容是有效还是无效,第1张

概述这似乎有点奇怪,当运行单元测试来检查我的标题的长度是否> 10如果我包含“断言product.invalid?”,我的测试将通过.在我的其他任何断言之前: require 'test_helper'class ProductTest < ActiveSupport::TestCasetest "product title is too short" do product = Pro 这似乎有点奇怪,当运行单元测试来检查我的标题的长度是否> 10如果我包含“断言product.invalID?”,我的测试将通过.在我的其他任何断言之前:

require 'test_helper'class ProductTest < ActiveSupport::TestCasetest "product Title is too short" do    product = Product.new(:Title => "My lady",:description => "yyy",:price       => 1                         )    assert product.invalID?    assert_equal "must be atleast 10 characters long.",product.errors[:Title].join('; ')endend

但是,如果我不包括“断言product.invalID?”在assert_equal之前我得到了这个错误
1)失败:test_product_Title_is_too_short blah blah blah
(“必须至少10个字符.”)预期但是(“”).

这就是Test :: Unit的工作原理吗?在进行其他测试之前,我必须断言某些内容有效或无效?有点像初始化测试?

解决方法 这实际上不是您的测试框架的特征,而是ActiveRecord的特征.

使用ActiveRecord创建对象时,您可以分配验证以确保有关对象属性的某些事项(就像您在对象上一样).但是,这些验证只能在特定时间运行,而且正如您所观察到的那样,“新”方法不是这些时间之一.但是,通过询问具有无效的对象的有效性?方法,你已经触发了验证.

我认为更自然的是使用“创建”方法而不是“新”来触发对象的验证.自动创建支票验证,这将消除您对“无效”的调用?在您的测试中,仍应根据需要填充错误哈希值:

product = Product.create(:Title => "My lady",:price       => 1                     )assert_equal "must be atleast 10 characters long.",product.errors[:Title].join('; ')

与“创造”方法类似的是“创造”!如果任何验证失败,将实际引发异常的方法. create将只返回false并填充错误哈希.

有关验证的更多信息,请查看:
http://guides.rubyonrails.org/active_record_validations_callbacks.html

总结

以上是内存溢出为你收集整理的ruby-on-rails – Rails:Test :: Unit为什么在任何其他断言之前我需要断言某些内容是有效还是无效全部内容,希望文章能够帮你解决ruby-on-rails – Rails:Test :: Unit为什么在任何其他断言之前我需要断言某些内容是有效还是无效所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1289078.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存