class RuboCop::Cop::RSpec::MatchArray
Checks where ‘match_array` is used.
This cop checks for the following:
-
Prefer ‘contain_exactly` when matching an array with values.
-
Prefer ‘eq` when using `match_array` with an empty array literal.
@example
# bad it { is_expected.to match_array([content1, content2]) } # good it { is_expected.to contain_exactly(content1, content2) } # good it { is_expected.to match_array([content] + array) } # good it { is_expected.to match_array(%w(tremble in fear foolish mortals)) }
Constants
- MSG
- RESTRICT_ON_SEND
Public Instance Methods
Source
# File lib/rubocop/cop/rspec/match_array.rb, line 37 def on_send(node) return unless node.first_argument&.array_type? return if match_array_with_empty_array?(node) check_populated_array(node) end
Private Instance Methods
Source
# File lib/rubocop/cop/rspec/match_array.rb, line 46 def check_populated_array(node) return if node.first_argument.percent_literal? add_offense(node) do |corrector| array_contents = node.arguments.flat_map(&:to_a) corrector.replace( node, "contain_exactly(#{array_contents.map(&:source).join(', ')})" ) end end