jedcn/rspec-to-conclusion

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# rspec-to-conclusion

[![Circle CI](https://circleci.com/gh/jedcn/rspec-to-conclusion.svg?style=svg)](https://circleci.com/gh/jedcn/rspec-to-conclusion) [![Code Climate](https://codeclimate.com/github/jedcn/rspec-to-conclusion/badges/gpa.svg)](https://codeclimate.com/github/jedcn/rspec-to-conclusion) [![Test Coverage](https://codeclimate.com/github/jedcn/rspec-to-conclusion/badges/coverage.svg)](https://codeclimate.com/github/jedcn/rspec-to-conclusion)

A node based command for running rspec to conclusion

## Background

One time, myself, and my friends-- we found ourselves as JavaScript
engineers, building JavaScript products, writing JavaScript Unit
Tests.. and it was pretty cool.

But our integration tests? The tests that "drove a browser?" Those
tests were written in Ruby.

Ruby?

Ruby!

Ruby.

And RSpec + Capybara.

I :heart: Ruby. And I :blue_heart: RSpec.

But.. the big bummer was that the integration tests failed
sporadically and a full test run took as long as 45 minutes.

And.. for one reason or another, we couldn't fix the tests directly or
delete the problematic ones.

It was a weird time.

And so, for a [lark][exaltation-of-larks], I wanted to see what would
happen if we wrote a small utility that managed rspec runs with
JavaScript: :money_with_wings:.

[exaltation-of-larks]: http://www.amazon.com/An-Exaltation-Larks-Ultimate-Edition/dp/0140170960

## Usage

If you just run `rspec` by itself, it will run all of the specs in
your `specs/` directory.

However, if any of these fail, you have to manually parse through the
output to see which ones failed, and then run them again.

If you run `rspec-to-conclusion` it will run all of the specs in your
`specs/` directory, and it will also:

* Create an HTML record of the run in `rspecToConclusion-1.html`, and
  create a JSON record of the run in `rspecToConclusion-1.json`
* Parse the JSON and make note passing and failing specs.
* If you had any failures, it will start another rspec run and repeat
  the process above but for only the failed specs.
* HTML and JSON records of what happened during the second run will be
  created at: `rspecToConclusion-2.html` and
  `rspecToConclusion-2.json`
* `rspec-to-conclusion` will keep repeating this process until all of
  the specs have passed (:thumbsup:) *or* the maximum number of tries
  has been reached but you still have failures (:thumbsdown:).
* Once the runs have ended, an ascii summary will be printed. An
  example:

```
| File Name and Line Number      | Result  | Tries |
| ------------------------------ | ------- | ----- |
| ./spec/always_pend_spec.rb:2   | PENDING | 0     |
| ./spec/always_pend_spec.rb:6   | PENDING | 0     |
| ./spec/always_pass_spec.rb:2   | PASSED  | 1     |
| ./spec/always_pass_spec.rb:6   | PASSED  | 1     |
| ./spec/flakey_spec.rb:2        | PASSED  | 1     |
| ./spec/really_flakey_spec.rb:2 | PASSED  | 1     |
| ./spec/flakey_spec.rb:6        | FAILURE | 2     |
| ./spec/really_flakey_spec.rb:6 | FAILURE | 2     |
```

Finally, the status code returned by `rspec-to-conclusion` will be the
number of failing specs. So-- if they all passed-- it'll be zero and
signal success.

### Options

You can focus the number of specs by supplying a parameter:

#### target specific specs

    rspec-to-conclusion specs/for/a/feature

#### --tries

By default, the maximum number of tries is 5. You can change this to
be more or less:

    rspec-to-conclusion --tries 10

#### ENV variables

Any environment variables will be passed onto rspec:

    NOT_ON_MY_WATCH=true rspec-to-conclusion

## Installation

You can get `rspec-to-conclusion` by typing:

    npm install -g rspec-to-conclusion

### Miscellaneous

`rspec` must be in your `PATH`.