测试 Ruby

以下所有命令都假设您正在从 构建 Ruby 期间创建的 build/ 目录中运行它们。

以下大多数命令应该适用于 GNU make(Linux 和 macOS 上的默认选项)、BSD makeNMAKE,除非另有说明。

测试套件

Ruby 代码库中有几个测试套件

我们可以并行运行任何 make 脚本来加速它们。

  1. bootstraptest/

    这是一个在 Miniruby 上运行的小型测试套件。我们可以使用以下命令运行它

    make btest
    

    要运行单独的引导测试,我们可以指定文件名列表,或者在变量 BTESTS 中使用 --sets 标志

    make btest BTESTS="../bootstraptest/test_string.rb ../bootstraptest/test_class.rb"
    make btest BTESTS="--sets=string,class"
    

    要使用详细日志记录运行这些测试,我们可以将 -v 添加到 OPTS

    make btest OPTS="--sets=string,class -v"
    

    如果想在 Ruby(而不是 Miniruby)上运行引导测试套件,我们可以使用

    make test
    

    要使用详细日志记录运行这些测试,我们可以将 -v 添加到 OPTS

    make test OPTS=-v
    

    (仅限 GNU make)要运行特定文件,我们可以使用

    make ../test/ruby/test_string.rb

    您可以使用 -n 测试选项来使用正则表达式运行特定测试

    make ../test/ruby/test_string.rb TESTOPTS="-n /test_.*_to_s/"
  2. test/

    这是一个在 Ruby 上运行的更全面的测试套件。我们可以使用以下命令运行它

    make test-all
    

    我们可以使用 TESTS 选项在此套件中运行特定的测试文件或目录,例如

    make test-all TESTS="../test/ruby/"
    make test-all TESTS="../test/ruby/test_string.rb"

    我们可以使用 TESTS 选项运行此套件中的特定测试,首先指定文件名,然后指定测试名称,并以 --name 作为前缀。例如

    make test-all TESTS="../test/ruby/test_string.rb --name=TestString#test_to_s"

    要使用详细日志记录运行这些测试,我们可以将 -v 添加到 TESTS

    make test-all TESTS=-v

    我们可以显示 TESTS 选项的帮助

    make test-all TESTS=--help

    我们可以使用以下命令一起运行 test/bootstraptest/spec/ 中的所有测试(spec/ 将在后面的章节中解释)

    make check
    
  3. spec/ruby

    这是一个在 Ruby spec 仓库 中定义的测试套件,并定期镜像到此仓库的 spec/ruby 目录中。它测试 Ruby 编程语言的行为。我们可以使用以下命令运行它

    make test-spec
    

    我们可以使用 SPECOPTS 选项在此套件中运行特定的测试文件或目录,例如

    make test-spec SPECOPTS="../spec/ruby/core/string/"
    make test-spec SPECOPTS="../spec/ruby/core/string/to_s_spec.rb"

    要运行特定的测试,我们可以使用 --example 标志来匹配测试名称

    make test-spec SPECOPTS="../spec/ruby/core/string/to_s_spec.rb --example='returns self when self.class == String'"

    要使用详细日志记录运行这些规范,我们可以将 -v 添加到 SPECOPTS

    make test-spec SPECOPTS="../spec/ruby/core/string/to_s_spec.rb -Vfs"

    (仅限 GNU make)要运行 ruby-spec 文件或目录,我们可以使用

    make ../spec/ruby/core/string/to_s_spec.rb
  4. spec/bundler

    bundler 测试套件在 RubyGems 仓库 中定义,并定期镜像到此仓库的 spec/ruby 目录中。我们可以使用以下命令运行它

    make test-bundler
    

    要运行特定的 bundler spec 文件,我们可以按如下方式使用 BUNDLER_SPECS

    make test-bundler BUNDLER_SPECS=commands/exec_spec.rb

问题排查

在 s390x CPU 架构上运行测试套件

如果我们在 s390x CPU 架构上看到与 zlib 库相关的测试失败,我们可以使用 DFLTCC=0 运行测试套件以通过

DFLTCC=0 make check

当 zlib 库应用 madler/zlib#410 补丁以启用 deflate 算法产生不同的压缩字节流时,可能会发生失败。我们在 [ruby-core:114942][Bug #19909] 中处理此问题。