This was the tip of the week in the July 8, 2021 Ruby Weekly Newsletter.
Sometimes when writing Ruby tests with RSpec we want to run the whole test suite. Other times, we want to run only specific tests. Here are a few different ways to only run part of a test suite:
Running a spec file or full test suite with the
--fail-fast flag will stop the tests at the first failure. For example:
rspec spec --fail-fast will complete fully only if there are no failures in the suite. This can be helpful for large suites.
–example (-e) flag
-e) flag takes a string argument and runs only examples whose names include the argument.
For example, if we had this spec file
RSpec.describe Example do it "runs this specific test" do ... end it "does not run this" do ... end end
We can run
rspec spec/example_spec.rb -e "specific test" and only the first test will run. This is an additional reason it can be helpful to have well described tests.
We can run an example on a specific line by including that line number right after the specific file when running the test. We can add line numbers to our previous example to clarify:
1 RSpec.describe Example do 2 it "runs this specific test" do 3 ... 4 end 5 6 it "does not run this" do 7 ... 8 end 9 end
We can run
rspec spec/example_spec.rb:2 to only run the first spec.
If we only want to run a specific context or example, we can add the following to our spec/spec_helper.rb to configure the ability to focus on a specific set of tests:
RSpec.configure do |config| config.filter_run focus: true end
and then pass the symbol
:focus as an optional argument to our example or group before running our tests:
describe "only testing this", :focus do ... end
Hopefully some of these methods of running specific tests are useful in avoiding running the full suite unnecessarily!