4.3 KiB
Testing Ruby
Test suites
There are several test suites in the Ruby codebase:
We can run any of the make scripts in parallel to speed them up.
-
This is a small test suite that runs on Miniruby (see building Ruby). We can run it with:
make btest
To run it with logs, we can use:
make btest OPTS=-v
To run individual bootstrap tests, we can either specify a list of filenames or use the
--sets
flag in the variableBTESTS
:make btest BTESTS="bootstraptest/test_fork.rb bootstraptest/tes_gc.rb" make btest BTESTS="--sets=fork,gc"
If we want to run the bootstrap test suite on Ruby (not Miniruby), we can use:
make test
To run it with logs, we can use:
make test OPTS=-v
To run a file or directory with GNU make, we can use:
make test/ruby/test_foo.rb make test/ruby/test_foo.rb TESTOPTS="-n /test_bar/"
-
This is a more comprehensive test suite that runs on Ruby. We can run it with:
make test-all
We can run a specific test directory in this suite using the
TESTS
option, for example:make test-all TESTS=test/rubygems
We can run a specific test file in this suite by also using the
TESTS
option, for example:make test-all TESTS=test/ruby/test_array.rb
We can run a specific test in this suite using the
TESTS
option, specifying first the file name, and then the test name, prefixed with--name
. For example:make test-all TESTS="../test/ruby/test_alias.rb --name=TestAlias#test_alias_with_zsuper_method"
To run these specs with logs, we can use:
make test-all TESTS=-v
We can display the help of the
TESTS
option:make test-all TESTS=--help
If we would like to run the
test/
,bootstraptest/
andspec/
test suites (thespec/
is explained in a later section), we can runmake check
-
This is a test suite that exists in the Ruby spec repository and is mirrored into the
spec/ruby
directory in the Ruby repository. It tests the behavior of the Ruby programming language. We can run this using:make test-spec
To run a specific directory, we can use
SPECOPTS
to specify the directory:make test-spec SPECOPTS=spec/ruby/core/array
To run a specific file, we can also use
SPECOPTS
to specify the file:make test-spec SPECOPTS=spec/ruby/core/array/any_spec.rb
To run a specific test, we can use the
--example
flag to match against the test name:make test-spec SPECOPTS="../spec/ruby/core/array/any_spec.rb --example='is false if the array is empty'"
To run these specs with logs, we can use:
make test-spec SPECOPTS=-Vfs
To run a ruby-spec file or directory with GNU make, we can use
make spec/ruby/core/foo/bar_spec.rb
-
The bundler test suite exists in the RubyGems repository and is mirrored into the
spec/bundler
directory in the Ruby repository. We can run this using:make test-bundler
To run a specific bundler spec file, we can use
BUNDLER_SPECS
as follows:make test-bundler BUNDLER_SPECS=commands/exec_spec.rb
Troubleshooting
Running test suites on s390x CPU Architecture
If we see failing tests related to the zlib library on s390x CPU architecture, we can run the test suites with DFLTCC=0
to pass:
DFLTCC=0 make check
The failures can happen with the zlib library applying the patch madler/zlib#410 to enable the deflate algorithm producing a different compressed byte stream. We manage this issue at [ruby-core:114942][Bug #19909].