summaryrefslogtreecommitdiff
path: root/doc/contributing/testing_ruby.md
blob: 74300d221d7b70a930d8416e8dae6e41c6df63bc (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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# 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
    ```

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

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 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=/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 directory, we can use `MSPECOPT` to specify the directory:

    ```
    make test-spec MSPECOPT=spec/ruby/core/array
    ```

    To run a specific file, we can also 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
    ```

    To run a ruby-spec file or directory with GNU make, we can use

    ```
    make spec/ruby/core/foo/bar_spec.rb
    ```

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

    To run a specific bundler spec file, we can use `BUNDLER_SPECS` as follows:

    ```
    $ make test-bundler BUNDLER_SPECS=commands/exec_spec.rb
    ```