summaryrefslogtreecommitdiff
path: root/doc/contributing/testing_ruby.md
blob: c54b14c7103afdfbbf5faea055f6111ac1c55ded (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Testing Ruby

## Test suites

There are several test suites in the Ruby codebase:

We can run any of the make scripts [in parallel](building_ruby.md#label-Running+make+scripts+in+parallel) to speed them up.

1. [bootstraptest/](https://github.com/ruby/ruby/tree/master/bootstraptest)

    This is a small test suite that runs on Miniruby (see [building Ruby](building_ruby.md#label-Miniruby+vs+Ruby)). We can run it with:

    ```
    make btest
    ```

    To run it with logs, we can use:

    ```
    make btest OPTS=-v
    ```

    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
    ```

2. [test/](https://github.com/ruby/ruby/tree/master/test)

    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 file in this suite using the `TESTS` environment variable, for example:

    ```
    make test-all TESTS=test/ruby/test_array.rb
    ```

    We can run a specific test in this suite using the `TESTS` environment variable, 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=/test_aias_with_zsuper_method/"
    ```

    To run these specs with logs, we can use:

    ```
    make test-all TESTS=-v
    ```

    If we would like to run both the `test/` and `bootstraptest/` test suites, we can run

    ```
    make check
    ```

3. [spec/ruby](https://github.com/ruby/ruby/tree/master/spec/ruby)

    This is a test suite that exists in [the Ruby spec repository](https://github.com/ruby/spec) 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 file, we can use `MSPECOPT` to specify the file:

    ```
    make test-spec MSPECOPT=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 MSPECOPT="../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 MSPECOPT=-Vfs
    ```

4. [spec/bundler](https://github.com/ruby/ruby/tree/master/spec/bundler)

    The bundler test suite exists in [the RubyGems repository](https://github.com/rubygems/rubygems/tree/master/bundler/spec) and is mirrored into the `spec/bundler` directory in the Ruby repository. We can run this using:

    ```
    make test-bundler
    ```