rubocop-rspec icon indicating copy to clipboard operation
rubocop-rspec copied to clipboard

Cop idea: HaveAttributes

Open Darhazer opened this issue 5 years ago • 0 comments

If a test checks few attributes in a row, it probably deserve to use have_attributes bad:

expect(obj.foo).to eq(bar)
expect(obj.fu).to eq(bax)
expect(obj.name).to eq(baz)

good:

expect(obj).to have_attributes(
foo: bar,
fu: bax
name: baz

Things to consider: the used matches. Initially, only eq could be used, as it could turn out to be quite complex to detect what can be converted to have_attributes and what not. We need a list of matching matchers. An initial list:

be < 2 => a_value < 2
be > 2 => a_value > 2
be_an_instance_of => an_instance_of
be_within => a_value_within
contain_exactly => a_collection_containing_exactly
end_with => a_string_ending_with, ending_with
match => a_string_matching
start_with => a_string_starting_with

Check only direct method calls, no method chains The method calls should be without arguments

Darhazer avatar Oct 23 '20 11:10 Darhazer