Question

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?

Was it helpful?

Solution

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

OTHER TIPS

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"

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top