Ruby on rails 模型中的验证方法和测试之间的错误:单元断言结果

Ruby on rails 模型中的验证方法和测试之间的错误:单元断言结果,ruby-on-rails,ruby,unit-testing,testing,tdd,Ruby On Rails,Ruby,Unit Testing,Testing,Tdd,Ruby Noob——我已经搜索了这么多,读了这本书,还看了一部没有运气的电影 我无法将方法关联与我编写的测试进行协调。目前(代码如下),两个测试,一个检查姓名是否存在,一个检查电子邮件是否存在,都通过了,没有失败或错误——好的,看起来不错 如果我从模型中删除两个validates语句,那么两个测试都会失败——这也是有意义的 但是,如果我只删除其中一个 validates :name, :presence => true 或 validates :email, :presence =&g

Ruby Noob——我已经搜索了这么多,读了这本书,还看了一部没有运气的电影

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

如果我从模型中删除两个validates语句,那么两个测试都会失败——这也是有意义的

但是,如果我只删除其中一个

validates :name, :presence => true

validates :email, :presence => true
从模型来看,两个测试都通过,没有失败。这个结果对我来说毫无意义。我是否创建了错误的测试


user.rb模型:

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

  has_many :connections

  validates :name, :presence => true
  validates :email, :presence => true
end
class用户true
验证:email,:presence=>true
结束
测试/单元/用户_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
需要“测试助手”
类UserTest
是的,您创建了错误的测试。在任何测试中,你只需要测试一个前提, 正如在中一样,用户应该有名称应该只是用户验证名称的存在

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

你的测试代码

user = User.new assert !user.save user=user.new 断言!user.save 断言!user.errors.get(:name).blank?
您可能还想看看,这有助于简化测试的编写:)

您是对的,我没有针对单个前提(或属性)进行测试。我没有提到我使用的是Rails 3,其中“on”方法已不存在。相反,我使用了“get”方法,在你的答案中用“get”代替“on”,这对我很有效。 user = User.new assert !user.save assert !user.errors.get(:email).blank? user = User.new assert !user.save assert !user.errors.get(:name).blank?