class RuboCop::Cop::RSpec::EmptyExampleGroup
end
end
include_tests ‘shared tests’
let(:chunkiness) { true }
context ‘extra chunky’ do # not flagged by rubocop
let(:chunkiness) { false }
let(:bacon) { Bacon.new(chunkiness) }
describe Bacon do
# bacon_spec.rb
end
config.alias_it_behaves_like_to(:include_tests)
RSpec.configure do |config|
# spec_helper.rb
# - include_tests
# CustomIncludeMethods:
# RSpec/EmptyExampleGroup:
# .rubocop.yml
@example configuration
end
pending ‘will add tests later’
describe Bacon do
# good
end
end
expect(bacon.chunky?).to be_truthy
it ‘is chunky’ do
let(:chunkiness) { false }
let(:bacon) { Bacon.new(chunkiness) }
describe Bacon do
# good
end
end
expect(bacon.chunky?).to be_truthy
it ‘is chunky’ do
end
let(:chunkiness) { true }
context ‘extra chunky’ do # flagged by rubocop
let(:chunkiness) { false }
let(:bacon) { Bacon.new(chunkiness) }
describe Bacon do
# bad
@example usage
This cop is configurable using the ‘CustomIncludeMethods` option
Checks if an example group does not include any tests.
def conditionals_with_examples?(body)
def conditionals_with_examples?(body) return unless body.begin_type? body.each_descendant(:if).any? do |if_node| examples_in_branches?(if_node) end end
def custom_include?(method_name)
def custom_include?(method_name) custom_include_methods.include?(method_name) end
def custom_include_methods
def custom_include_methods cop_config .fetch('CustomIncludeMethods', []) .map(&:to_sym) end
def examples_in_branches?(if_node)
def examples_in_branches?(if_node) if_node.branches.any? { |branch| examples?(branch) } end
def offensive?(body)
def offensive?(body) return true unless body return false if conditionals_with_examples?(body) if body.if_type? !examples_in_branches?(body) else !examples?(body) end end
def on_block(node)
def on_block(node) return if node.each_ancestor(:def, :defs).any? return if node.each_ancestor(:block).any? { |block| example?(block) } example_group_body(node) do |body| add_offense(node.send_node) if offensive?(body) end end