Brief look at RSpec's formatting options
A few weeks ago, I noticed weird output in the RSpec test suite (~4000 tests) for a Rails application:
.............................................................................................unknown OID 353414: failed to recognize type of '<field>'. It will be treated as String ...........................................................................................................................................
This Rails app uses a PostgreSQL database. After some Googling, it turns out that this is a warning from PostgreSQL. When the database doesn’t recognize the type to use for a column, it casts to string by default.
I first thought I could look through previous CI runs to find out when this warning first started showing up. Then I decided to use RSpec’s documentation format instead. I ran the build locally, and the test that triggers the warning for the first time was exposed:
➜ myproject git:(develop) ✗ bundle exec rspec spec --format documentation
...
Admin::ClientsController
GET 'index'
unknown OID 353414: failed to recognize type of 'client_campaigns'. It will be treated as String.
non-admin user
does not authorize non-admin users
admin user
lists all clients
...
The RSpec documentation format shows us the test description and the example names. Because of this, we can tell what test we can run to reproduce the warning. It also allows us to figure out where in the codebase the warning is triggered from.
A good alternative to the documentation format is the Fuubar gem .
Using rspec --format Fuubar
, you get a nice looking progress bar, as well as
its coolest feature, insta-failing tests. With Fuubar, you don’t have to wait
until the build ends or until you ctrl+c out of RSpec, you get the failure
result right away. If you don’t care about the build finishing after the first
failure, you can use RSpec’s fail fast
option instead.
Since --format Fuubar
doesn’t show test descriptions by default, you can
combine Fuubar with the documentation format, using
rspec --format Fuubar --format documentation
. This way, you get both the
documentation format and insta-failing tests. If you prefer this formatting to
RSpec’s default formatting, remember you can always add the flag to your
.rspec
file.