无法使用测试单元测试用户名验证

时间:2013-03-10 14:43:37

标签: ruby-on-rails unit-testing testing

我的用户模型中有以下验证:

  validates :name, :format => {
    :with    => /^[a-zA-Z]+$/,
    :message => 'Only letters allowed.'
  }

这是我的测试:

  test 'name must consist of letters only' do
    user = User.new(:name => 'test123')
    assert user.errors[:name].any?
  end

测试总是失败。我做错了什么?的xD

2 个答案:

答案 0 :(得分:2)

你的断言与它应该是的相反。颠倒断言的条件。

试试这个

test 'name must consist of letters only' do
  user = User.new(:name => 'test123')
  assert !user.valid?
end

另外,请尝试使用validates_format_of代替validate

validates_format_of :name, :with    => /^[a-zA-Z]+$/, :message => 'Only letters allowed.'

答案 1 :(得分:0)

我弄清楚我的问题是什么:
在尝试访问user.valid?之前,我应该完成user.invalid?user.saveuser.errors。上面的命令实际上会产生错误,之后我可以访问它们 最终结果:

  validates_format_of :name, :with => /^[a-zA-Z]+$/, :message => 'Only letters allowed'

  test 'name must consist of letters only' do
    user = User.new(:name => 'test123')
    user.save
    assert user.errors[:name].any?
  end
相关问题