Skip to content

Commit

Permalink
Expand Substitution Matching Types support
Browse files Browse the repository at this point in the history
Add substitution support for `Symbol` and `Numeric`. It can be
convenient to pass in the value of an `ActiveRecord::Base#id`, or a
`Symbol` declared elsewhere in the test.
  • Loading branch information
seanpdoyle committed Dec 3, 2020
1 parent 1cfcd00 commit 288aa9e
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 2 deletions.
5 changes: 4 additions & 1 deletion lib/rails/dom/testing/assertions/selector_assertions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,14 @@ def css_select(*args)
# assert_select "li", 8
# end
#
# The selector may be a CSS selector expression (String) or an expression
# The selector may be a CSS selector expression (String, Symbol, or Numeric) or an expression
# with substitution values (Array).
# Substitution uses a custom pseudo class match. Pass in whatever attribute you want to match (enclosed in quotes) and a ? for the substitution.
# assert_select returns nil if called with an invalid css selector.
#
# assert_select "div:match('id', ?)", "id_string"
# assert_select "div:match('id', ?)", :id_string
# assert_select "div:match('id', ?)", 1
# assert_select "div:match('id', ?)", /\d+/
#
# === Equality Tests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ def matcher_for(value, format_for_presentation)
end

def substitutable?(value)
value.is_a?(String) || value.is_a?(Regexp)
[ Symbol, Numeric, String, Regexp ].any? { |type| value.is_a? type }
end
end
10 changes: 10 additions & 0 deletions test/selector_assertions_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,16 @@ def test_substitution_values
end
end

def test_substitution_values_with_values_other_than_string_or_regexp
render_html %Q{<div id="id_string">symbol</div><div id="1">numeric</div>}
assert_select "div:match('id', ?)", :id_string do |elements|
assert_equal 1, elements.size
end
assert_select "div:match('id', ?)", 1 do |elements|
assert_equal 1, elements.size
end
end

def test_assert_select_root_html
render_html '<a></a>'

Expand Down

0 comments on commit 288aa9e

Please sign in to comment.