首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用TestUnit测试用户名验证

无法使用TestUnit测试用户名验证
EN

Stack Overflow用户
提问于 2013-03-10 22:43:37
回答 2查看 57关注 0票数 0

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

代码语言:javascript
复制
  validates :name, :format => {
    :with    => /^[a-zA-Z]+$/,
    :message => 'Only letters allowed.'
  }

下面是我的测试:

代码语言:javascript
复制
  test 'name must consist of letters only' do
    user = User.new(:name => 'test123')
    assert user.errors[:name].any?
  end

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-10 22:48:36

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

尝尝这个

代码语言:javascript
复制
test 'name must consist of letters only' do
  user = User.new(:name => 'test123')
  assert !user.valid?
end

另外,尝试使用validates_format_of而不是validate

代码语言:javascript
复制
validates_format_of :name, :with    => /^[a-zA-Z]+$/, :message => 'Only letters allowed.'
票数 2
EN

Stack Overflow用户

发布于 2013-03-11 00:23:12

我找到了我的问题所在:

在尝试访问user.errors之前,我应该使用user.valid?user.invalid?user.save。上面这些命令实际上会产生错误,之后我就可以访问它们了。

最终结果:

代码语言:javascript
复制
  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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15323444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档