Filtering
One other great feature of RSpec is that it allows us to specify which tests we want to execute.
Remember the test output when we made our specs fail before?
It ended with something like this:
Failed examples:
rspec ./user_spec.rb:28 # User born in 2001 should not be born in leap year
The bit :28
at the end of the filename means “line 28”. So this is how we can tell RSpec to
execute one single test only, and it even outputs the command we need to run to
the test output for our convenience. In order to re-run the test that has
failed, we can copy and paste this command from the output.
That is really convenient if you have a big test suite and your tests are rather slow. So, while working on fixing a certain bug you’d only want to run this one failing test.
You can also run groups of tests: E.g. you can run all tests in the first
context
by adding the line that context
statement sits on. In my case
that’s line 25
, so this command runs all tests in the first context:
$ rspec --format doc ./user_spec.rb:25
Run options: include {:locations=>{"./user_spec.rb"=>[25]}}
User
born in 2001
should be named "Francisca"
should not be born in leap year
Finished in 0.00237 seconds (files took 0.15871 seconds to load)
2 examples, 0 failures
That’s pretty handy.
RSpec has more such features that allow you to run your tests selectively. For example you can tag contexts and tests, and then specify certain tags when running your tests.