0

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

  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

4

2 回答 2

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.'
于 2013-03-10T14:48:36.487 回答
0

我弄清楚我的问题是什么:
我应该已经完成user.valid?​​,user.invalid?或者user.save在尝试访问之前user.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
于 2013-03-10T16:23:12.167 回答