You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Minitest测试Ruby或Rails中的常量?

用Minitest测试Ruby/Rails常量的方法

不管常量定义在模型、控制器还是自定义PORO(Plain Old Ruby Object)中,用Minitest测试的核心逻辑都是直接访问常量,断言其值或行为符合预期。以下是针对你给出的CuteCat模型中常量的测试示例:

1. 创建测试文件

如果是Rails项目,针对CuteCat模型的测试文件路径为test/models/cute_cat_test.rb;如果是纯Ruby项目,可放在test目录下对应位置。

2. 编写测试代码

require "test_helper" # Rails项目需引入,纯Ruby项目替换为对应文件require

class CuteCatTest < ActiveSupport::TestCase # Rails用这个,纯Ruby用Minitest::Test
  test "THE_ANSWER_TO_EVERYTHING 常量值正确" do
    assert_equal 42, CuteCat::THE_ANSWER_TO_EVERYTHING
  end

  test "PI_WITH_PRECISION_FIVE 常量值正确" do
    assert_equal 3.14159, CuteCat::PI_WITH_PRECISION_FIVE
  end

  test "FIRST_TEN_PRIME_NUMBERS 常量值正确且已冻结" do
    expected_primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
    assert_equal expected_primes, CuteCat::FIRST_TEN_PRIME_NUMBERS
    assert CuteCat::FIRST_TEN_PRIME_NUMBERS.frozen?
  end

  test "FAMOUS_CUTE_CATS 常量值正确且已冻结" do
    expected_cats = ['Grumpy Cat', 'Hello Kitty', 'Jinx the Cat']
    assert_equal expected_cats, CuteCat::FAMOUS_CUTE_CATS
    assert CuteCat::FAMOUS_CUTE_CATS.frozen?
  end

  test "HEXADECIMAL_COLOR_REGEX 正则匹配行为正确" do
    # 测试匹配合法格式
    assert_match CuteCat::HEXADECIMAL_COLOR_REGEX, "#FF0000"
    assert_match CuteCat::HEXADECIMAL_COLOR_REGEX, "#123abc"
    # 测试不匹配非法格式
    refute_match CuteCat::HEXADECIMAL_COLOR_REGEX, "FF0000" # 缺少#
    refute_match CuteCat::HEXADECIMAL_COLOR_REGEX, "#FFF" # 长度不足6位
    refute_match CuteCat::HEXADECIMAL_COLOR_REGEX, "#GGGGGG" # 非十六进制字符
  end
end

3. 适配其他类型文件的测试

如果常量定义在PORO(比如lib/my_constants.rb),只需在测试文件顶部引入该文件,然后直接通过类名访问常量即可:

require "minitest/autorun"
require_relative "../lib/my_constants"

class MyConstantsTest < Minitest::Test
  test "测试自定义PORO中的常量" do
    assert_equal 42, MyConstants::THE_ANSWER_TO_EVERYTHING
  end
end

内容的提问来源于stack exchange,提问作者BenFenner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:55:06