RuboCop
RSpec¶ ↑
RSpec-specific analysis for your projects, as an extension to RuboCop.
Installation¶ ↑
Just install the rubocop-rspec
gem
gem install rubocop-rspec
or if you use bundler put this in your Gemfile
gem 'rubocop-rspec'
Usage¶ ↑
You need to tell RuboCop
to load the RSpec extension. There are three ways to do this:
RuboCop
configuration file¶ ↑
Put this into your .rubocop.yml
.
require: rubocop-rspec
Now you can run rubocop
and it will automatically load the RuboCop
RSpec cops together with the standard cops.
Command line¶ ↑
rubocop --require rubocop-rspec
Rake task¶ ↑
RuboCop::RakeTask.new do |task| task.requires << 'rubocop-rspec' end
Code Climate¶ ↑
rubocop-rspec is available on Code Climate as part of the rubocop engine. Learn More.
Documentation¶ ↑
You can read more about RuboCop-RSpec in its official manual.
Inspecting files that don't end with _spec.rb
¶ ↑
By default, rubocop-rspec
only inspects code within paths ending in _spec.rb
or including spec/
. You can override this setting in your config file by specifying one or more patterns:
# Inspect all files AllCops: RSpec: Patterns: - '.+'
# Inspect only files ending with `_test.rb` AllCops: RSpec: Patterns: - '_test.rb$'
The Cops¶ ↑
All cops are located under lib/rubocop/cop/rspec, and contain examples/documentation.
In your .rubocop.yml
, you may treat the RSpec cops just like any other cop. For example:
RSpec/FilePath: Exclude: - spec/my_poorly_named_spec_file.rb
Non-goals of RuboCop
RSpec¶ ↑
Enforcing should
vs. expect
syntax¶ ↑
Enforcing
expect(calculator.compute(line_item)).to eq(5)
over
calculator.compute(line_item).should == 5
is a feature of RSpec itself – you can read about it in the RSpec Documentation
Enforcing an explicit RSpec receiver for top-level methods (disabling monkey patching)¶ ↑
Enforcing
Rspec.describe MyClass do ... end
over
describe MyClass do ... end
can be achieved using RSpec's disable_monkey_patching!
method, which you can read more about in the RSpec Documentation. This will also prevent should
from being defined on every object in your system.
Before disabling should
you will need all your specs to use the expect
syntax. You can use Transpec, which will do the conversion for you.
Contributing¶ ↑
Checkout the contribution guidelines.
License¶ ↑
rubocop-rspec
is MIT licensed. See the accompanying file for the full text.