gpt4 book ai didi

ruby-on-rails - 模型和测试中的验证方法之间的错误 :Unit assertion results

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:37 25 4
gpt4 key购买 nike

Ruby Noob - 我搜索过 SO,阅读 Rails Guide on Testing , 并观看了 RailsCast没有运气。

我无法协调方法关联与我编写的测试。目前(下面的代码),两项测试,一项检查是否存在姓名,一项检查是否存在电子邮件,都通过了,没有失败或错误——好的,看起来不错。

如果我从模型中删除两个验证语句,两个测试都会失败——这也是有道理的。

但是,如果我只删除 ONE 中的任何一个

validates :name, :presence => true

validates :email, :presence => true

根据模型,BOTH 测试均通过且未失败。这个结果对我来说没有意义。我是否创建了错误的测试?


user.rb 模型:

class User < ActiveRecord::Base
attr_accessible :email, :name

has_many :connections

validates :name, :presence => true
validates :email, :presence => true
end

测试/单元/user_test.rb

require 'test_helper'

class UserTest < ActiveSupport::TestCase
test "a user should have a name" do
user = User.new
assert !user.save
end

test "a user should have an email" do
user = User.new
assert !user.save
end
end

最佳答案

是的,您创建了错误的测试。在任何测试中,你只需要测试一个前提,如 a user should have name 应该只是用户验证名称的存在。

首先让我们来看看为什么在第三种情况下两个测试都通过了,因为模型中只有一个验证语句存在。

你的测试代码,

   user = User.new   assert !user.save

因此,如果您有 validates :name, :presence => truevalidates :email, :presence => true

user.save 将返回 false,用户对象将不会保存,因为存在的任何验证都会生效。

您可能希望更改测试以检查名称错误

 user = User.new assert !user.save assert  !user.errors.get(:email).blank?
 user = User.new assert !user.save assert  !user.errors.get(:name).blank?

您可能还想看看 https://github.com/thoughtbot/shoulda , 有助于使编写测试更容易 :)

关于ruby-on-rails - 模型和测试中的验证方法之间的错误 :Unit assertion results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13242587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com