Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Rails5 Spec Converter

Build Status

A script that fixes the syntax of your tests so Rails 5 will like them better. Inspired by transpec, the RSpec 2 -> 3 syntax conversion tool.

If you write a test like this:

get :users, search: 'bayleef', format: :json
expect(response).to be_success

Rails 5 will issue a hearty deprecation warning, persuading you to write this instead:

get :users, params: { search: 'bayleef' }, format: :json
expect(response).to be_success

This is great! That syntax is great. However, if you have a thousand tests lying around, it will probably be very time consuming to find all the places where you need to fix that.


Install the gem standalone like so:

$ gem install rails5-spec-converter


Make sure you've committed everything to Git first, then

$ cd some-project
$ rails5-spec-converter

This will update all the files in that directory matching the globs spec/**/*_spec.rb or test/**/*_test.rb.

If you want to specify a specific set of files instead, you can run rails5-spec-converter path_to_my_files.

By default it will make some noise, run with rails5-spec-converter --quiet if you want it not to.



The tool will attempt to indent the newly-added "params" hash in situations when the arguments are on newlines, e.g.:

  get :index
      search: 'bayleef',
      format: :json


  get :index
      params: {
        search: 'bayleef'
      format: :json

Since the extra spaces in front of 'params' are brand-new whitespace, you may want to configure them (default is 2 spaces).

rails5-spec-converter --indent ' '

rails5-spec-converter --indent '\t'

Hash Spacing

By default, for single-line hashes, a single space will be added after the opening curly brace and before the ending curly brace. The space will be omitted if the new params hash will contain any hash literals that do not have surrounding whitespace, ex:

post :users, user: {name: 'bayleef'}


post :users, params: {user: {name: 'bayleef'}}
  • --no-hash-spacing will force hashes to be written without extra whitespace in all files regardless of context.

  • --hash-spacing will force hashes to be written with extra whitespace in all files regardless of context.


It should work for both RSpec and MiniTest, but who really knows?


After checking out the repo, run bin/setup to install dependencies. Then, run bundle exec rspec spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.


Bug reports and pull requests are welcome on GitHub at This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.


If this Gem helped you out at all, or it didn't help because you wanted it to do something different or it broke all your computer code, please let me know on twitter @tjgrathwell


The gem is available as open source under the terms of the MIT License.


A tool to upgrade Rails 4-style specs to Rails 5-style




No packages published
You can’t perform that action at this time.