How to run a single test in guard for rspec?
Asked Answered
S

3

41

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?

Sebaceous answered 15/1, 2014 at 1:16 Comment(0)
R
51

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

Regulator answered 15/1, 2014 at 4:3 Comment(4)
This does exactly what I needed, and the link was helpful too. Thanks!Sebaceous
This works, but when I remove :focus => true from the it block, guard says All examples were filtered out. Obviously this fails to satisfy the obvious work flow. A full solution would run all examples if there were no :focus clauses present.Rakes
OK, it turns out you can run all specs when there are no :focus clauses, via config.run_all_when_everything_filtered = true in the RSpec.configure block. Here are the docs.Rakes
Is there not a way to do this from the command line? I'm trying to make command line functionality work for both guard and for parallel specsPen
V
4

I think you can add the "focus: true" option for the spec you want to run, something like

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

then you save the file and guard runs only that focused test

when you are finished you just remove "focus: true"

Voiture answered 15/1, 2014 at 3:29 Comment(0)
N
4

You can use failed_mode: :focus in your Guardfile, as described here: https://github.com/guard/guard-rspec#list-of-available-options

Nobby answered 3/2, 2016 at 0:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.