The Ruby Spec Suite
The Ruby Spec Suite is a test suite for the behavior of the Ruby programming language.
It is not a standardized specification like the ISO one, and does not aim to become one. Instead, it is a practical tool to describe and test the behavior of Ruby with code.
Every example code has a textual description, which presents several advantages:
- It is easier to understand the intent of the author
- It documents how recent versions of Ruby should behave
- It helps Ruby implementations to agree on a common behavior
The specs are written with syntax similar to RSpec 2. They are run with MSpec, the purpose-built framework for running the Ruby Spec Suite. For more information, see the MSpec project.
The specs describe the language syntax, the core library, the standard library, the C API for extensions and the command line flags. The language specs are grouped by keyword while the core and standard library specs are grouped by class and method.
ruby/spec is known to be tested in these implementations for every commit:
- MRI on 30 platforms and 4 versions
- JRuby on Travis for both 1.7 and 9.x
- TruffleRuby on Travis
- Opal on Travis
ruby/spec describes the behavior of Ruby 2.2 and more recent Ruby versions. More precisely, every latest stable MRI release passes all specs of ruby/spec (latest 2.2.x, 2.3.x, 2.4.x, etc).
For older specs try these commits:
Running the specs
First, clone this repository:
$ git clone https://github.com/ruby/spec.git
Then move to it:
$ cd spec
$ git clone https://github.com/ruby/mspec.git ../mspec
And run the spec suite:
This will execute all the specs using the executable named
ruby on your current PATH.
Running Specs with a Specific Ruby Implementation
-t option to specify the Ruby implementation with which to run the specs.
The argument may be a full path to the Ruby binary.
$ ../mspec/bin/mspec -t /path/to/some/bin/ruby
Running Selected Specs
To run a single spec file, pass the filename to
$ ../mspec/bin/mspec core/kernel/kind_of_spec.rb
You can also pass a directory, in which case all specs in that directories will be run:
$ ../mspec/bin/mspec core/kernel
Finally, you can also run them per group as defined in
The following command will run all language specs:
$ ../mspec/bin/mspec :language
In similar fashion, the following commands run the respective specs:
$ ../mspec/bin/mspec :core $ ../mspec/bin/mspec :library $ ../mspec/bin/mspec :capi
History and RubySpec
This project was originally born from Rubinius tests being converted to the spec style. These specs were later extracted to their own project, RubySpec, with a specific vision and principles. At the end of 2014, Brian Shirai, the creator of RubySpec, decided to end RubySpec. A couple months later, the different repositories were merged and the project was revived. On 12 January 2016, the name was changed to "The Ruby Spec Suite" for clarity and to let the RubySpec ideology rest in peace.