模型测试通过时不应该

时间:2017-01-23 21:31:32

标签: ruby-on-rails

我使用rails创建用户模型创建模型用户名:string email:string,然后我在user.rb(模型)中写了一些验证

require 'test_helper'

class UserTest < ActiveSupport::TestCase
  def setup
    @user = User.new(name: "John Cena", email: "user@example-domain.de")
  end

  test "should be valid" do
    assert @user.valid?
  end

  test "should not be valid" do
    @user.name = ""
    @user.email = ""
    assert_not @user.valid?
  end
end

对此模型的简单测试

{{1}}

一切都很好,但如果我评论模型文件测试中的1行验证仍在通过。仅当两行都被注释时,测试失败。我应该怎么做才能对这个测试进行rapair?我不想从这个进行2次测试。

1 个答案:

答案 0 :(得分:1)

测试模型验证时,不要断言模型有效或无效。它会引发误报并使其成为您的测试需要满足模型中每个验证的要求 - 添加属性或验证意味着您需要重写测试!

相反,您应该通过查看errors对象来验证验证是否存在。

class UserTest < ActiveSupport::TestCase
  def setup
    @user = User.new
    @user.valid?
    @messages = @user.errors.messages
  end

  test "validates name" do
    assert_includes @messages[:name], "can't be blank"
  end

  test "validates email" do
    assert_includes @messages[:email], "can't be blank"
  end
end

您的功能和集成测试将涵盖整体验证 - 因此,如果您满足所有要求,则无需测试记录是否有效。