diff options
Diffstat (limited to 'spec/README.md')
| -rw-r--r-- | spec/README.md | 86 |
1 files changed, 78 insertions, 8 deletions
diff --git a/spec/README.md b/spec/README.md index 23fc7507c3..6a88c06e09 100644 --- a/spec/README.md +++ b/spec/README.md @@ -1,14 +1,23 @@ # spec/bundler -spec/bundler is rspec examples for bundler library(lib/bundler.rb, lib/bundler/*). +spec/bundler is rspec examples for bundler library (`lib/bundler.rb`, `lib/bundler/*`). ## Running spec/bundler To run rspec for bundler: + ```bash make test-bundler ``` +or run rspec with parallel execution: + +```bash +make test-bundler-parallel +``` + +If you specify `BUNDLER_SPECS=foo/bar_spec.rb` then only `spec/bundler/foo/bar_spec.rb` will be run. + # spec/ruby ruby/spec (https://github.com/ruby/spec/) is @@ -30,31 +39,80 @@ In other words: If adding a spec might reveal a bug in another implementation, then it is worth adding it. Currently, the only module which is MRI-specific is `RubyVM`. +## Changing behavior and versions guards + +Version guards (`ruby_version_is`) must be added for new features or features +which change behavior or are removed. This is necessary for other Ruby implementations +to still be able to run the specs and contribute new specs. + +For example, change: + +```ruby +describe "Some spec" do + it "some example" do + # Old behavior for Ruby < 2.7 + end +end +``` + +to: + +```ruby +describe "Some spec" do + ruby_version_is ""..."2.7" do + it "some example" do + # Old behavior for Ruby < 2.7 + end + end + + ruby_version_is "2.7" do + it "some example" do + # New behavior for Ruby >= 2.7 + end + end +end +``` + +See `spec/ruby/CONTRIBUTING.md` for more documentation about guards. + +To verify specs are compatible with older Ruby versions: + +```bash +cd spec/ruby +$RUBY_MANAGER use 2.4.9 +../mspec/bin/mspec -j +``` + ## Running ruby/spec To run all specs: + ```bash make test-spec ``` -Extra arguments can be added via `MSPECOPT`. +Extra arguments can be added via `SPECOPTS`. For instance, to show the help: + ```bash -make test-spec MSPECOPT=-h +make test-spec SPECOPTS=-h ``` You can also run the specs in parallel, which is currently experimental. It takes around 10s instead of 60s on a quad-core laptop. + ```bash -make test-spec MSPECOPT=-j +make test-spec SPECOPTS=-j ``` To run a specific test, add its path to the command: + ```bash -make test-spec MSPECOPT=spec/ruby/language/for_spec.rb +make test-spec SPECOPTS=spec/ruby/language/for_spec.rb ``` If ruby trunk is your current `ruby` in `$PATH`, you can also run `mspec` directly: + ```bash # change ruby to trunk ruby -v # => trunk @@ -63,8 +121,8 @@ spec/mspec/bin/mspec spec/ruby/language/for_spec.rb ## ruby/spec and test/ -The main difference between a "spec" under spec/ruby and -a test under test/ is that specs are documenting what they test. +The main difference between a "spec" under `spec/ruby/` and +a test under `test/` is that specs are documenting what they test. This is extremely valuable when reading these tests, as it helps to quickly understand what specific behavior is tested, and how a method should behave. Basic English is fine for spec descriptions. @@ -87,4 +145,16 @@ describe "The for expression" do end ``` -For more details, see spec/ruby/CONTRIBUTING.md. +For more details, see `spec/ruby/CONTRIBUTING.md`. + +# spec/syntax_suggest + +## Running spec/syntax_suggest + +To run rspec for syntax_suggest: + +```bash +make test-syntax-suggest +``` + +If you specify `SYNTAX_SUGGEST_SPECS=foo/bar_spec.rb` then only `spec/syntax_suggest/foo/bar_spec.rb` will be run. |
