class RuboCop::Cop::RSpec::ImplicitBlockExpectation
end
expect { do_something }.to change(something).to(new_value)
it ‘changes something to a new value’ do
# good
it { is_expected.to change(something).to(new_value) }
subject { -> { do_something } }
# bad
@example
Prefer using explicit block expectations.
Check that implicit block expectation syntax is not used.
def find_subject(block_node)
def find_subject(block_node) block_node.body.child_nodes.find { |send_node| subject?(send_node) } end
def multi_statement_example_group?(node)
def multi_statement_example_group?(node) example_group_with_body?(node) && node.body.begin_type? end
def nearest_subject(node)
def nearest_subject(node) node .each_ancestor(:block) .lazy .select { |block_node| multi_statement_example_group?(block_node) } .map { |block_node| find_subject(block_node) } .find(&:itself) end
def on_send(node)
def on_send(node) implicit_expect(node) do |implicit_expect| subject = nearest_subject(implicit_expect) add_offense(implicit_expect) if lambda_subject?(subject&.body) end end