在Ruby on rails项目中,我希望在代码中断言异常消息,以确保它失败的原因是正确的,并提到重要的细节.

下面是一个总是引发以下问题的函数:

class Quiz < ApplicationRecord
  def self.oops
    raise ArgumentError.new("go away")
  end
end

测试:

require "test_helper"

class QuizTest < ActiveSupport::TestCase
  test "error message" do
    assert_raises(ArgumentError, match: /whatever/) do
      Quiz.oops()
    end
  end
end

当我运行bin/rake test时,它通过了,但我预计它会失败,因为实际的错误消息与assert_raises中的match不匹配.

如何捕获错误消息并针对其进行断言?

推荐答案

我认为您可以使用一种稍有不同的方法(使用块捕获错误消息,然后对消息内容进行断言):

test "error message" do
  exception = assert_raises(ArgumentError) do
    Quiz.oops()
  end
  assert_match(/whatever/, exception.message)
end

Ruby-on-rails相关问答推荐

是否从已转换为字符串的数组中提取符号?

如何将 ActionController::RoutingError 分类为 Sentry 中的错误

Rails 创建自定义函数/方法以及存储位置

我需要在我的 Rails 7 应用程序中保留 app/assets/config/manifest.js 吗?

Rails - 如何从模型中查询 has_many

如何使用 activerecord activerecord-session_store 在 Rails 应用程序中使用 cookie 值在数据库中查找会话记录

线程如何在 Web 应用程序中工作?

如何从设计中删除/禁用注册

如何从 Ruby on Rails 应用程序返回正确的 HTTP 错误代码

如何在 Rails 3 中使用 Capybara 单击具有相同文本的第二个链接?

Rails - 设计 - 登录时出现错误消息?

如何使用 Capistrano gem 为生产数据库 seeder ?

如何在 Linux 上使用 Ruby 2.0 改进独角兽进程之间的内存共享

Phusion 乘客(适合傻瓜!)

升级到设计 3.1 => 获取重置密码令牌无效

如何在rails中异步加载部分页面

在 ruby​​ on rails 中创建自定义 html 助手

# 轨道中的 TODO

Ruby on Rails:如何在 select_tag 中使用默认占位符?

find、where 和 find_by_id 有什么区别?