Reputation: 3842
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?
Upvotes: 41
Views: 11351
Reputation: 2923
You can use failed_mode: :focus
in your Guardfile, as described here: https://github.com/guard/guard-rspec#list-of-available-options
Upvotes: 4
Reputation: 4959
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
Upvotes: 51
Reputation: 15838
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"
Upvotes: 4