How to run a single test in guard for rspec?

eirikir picture eirikir · Jan 15, 2014 · Viewed 9.8k times · Source

I use guard-rspec to automatically run necessary rspec tests as my files changes, and I love how it works. However, when I'm debugging a file with multiple tests, sometimes I just want an individual test to be re-run. For example, with rspec from the command line:

rspec spec/requests/my_favorite_spec.rb:100

This will run only the single spec at line 100 in my_favorite_spec.rb.

I tried inputting the above into the guard console, but it just ran all the tests as if I had just pressed enter. Is there another syntax in the guard console to run a single spec?

Answer

ChrisBarthol picture ChrisBarthol · Jan 15, 2014

You have to argument your spec/spec_helper.rb file to accept the :focus => true statement.

RSpec.configure do |config|
  config.filter_run :focus => true
end

Then you can use

it 'does something', :focus => true do
  //your spec
end

or

describe "something", :focus => true do
  before do
     sign in
     visit page
  end

  it { does something }
  it { does something else }
end

If you are going to take that approach, you probably also want to ensure all specs are run if there is no :focus => true anywhere, using the documented approach:

RSpec.configure do |config|
  config.run_all_when_everything_filtered = true
end

You can do a lot with filters; you might want to have a look at this page: https://relishapp.com/rspec/rspec-core/v/3-0/docs/filtering