Module: ActionDispatch::Assertions::SelectorAssertions
- Defined in:
- lib/jquery-rails/assert_select_jquery.rb
Constant Summary collapse
- PATTERN_HTML =
Selects content from a JQuery response. Patterned loosely on assert_select_rjs.
Narrowing down
With no arguments, asserts that one or more method calls are made.
Use the
method
argument to narrow down the assertion to only statements that call that specific method.Use the
opt
argument to narrow down the assertion to only statements that passopt
as the first argument.Use the
id
argument to narrow down the assertion to only statements that invoke methods on the result of using that identifier as a selector.Using blocks
Without a block, +assert_select_jquery_ merely asserts that the response contains one or more statements that match the conditions specified above
With a block +assert_select_jquery_ also asserts that the method call passes a javascript escaped string containing HTML. All such HTML fragments are selected and passed to the block. Nested assertions are supported.
Examples
# asserts that the #notice element is hidden assert_select :hide, ‘#notice’
# asserts that the #cart element is shown with a blind parameter assert_select :show, :blind, ‘#cart’
# asserts that #cart content contains a #current_item assert_select :html, ‘#cart’ do
assert_select '#current_item'
end
"\"((\\\\\"|[^\"])*)\""
- PATTERN_UNICODE_ESCAPED_CHAR =
/\\u([0-9a-zA-Z]{4})/
Instance Method Summary collapse
Instance Method Details
#assert_select_jquery(*args, &block) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/jquery-rails/assert_select_jquery.rb', line 48 def assert_select_jquery(*args, &block) jquery_method = args.first.is_a?(Symbol) ? args.shift : nil jquery_opt = args.first.is_a?(Symbol) ? args.shift : nil id = args.first.is_a?(String) ? args.shift : nil pattern = "\\.#{jquery_method || '\\w+'}\\(" pattern = "#{pattern}['\"]#{jquery_opt}['\"],?\\s*" if jquery_opt pattern = "#{pattern}#{PATTERN_HTML}" if block pattern = "(?:jQuery|\\$)\\(['\"]#{id}['\"]\\)#{pattern}" if id fragments = [] response.body.scan(Regexp.new(pattern)).each do |match| doc = HTML::Document.new(unescape_js(match.first)) doc.root.children.each do |child| fragments.push child if child.tag? end end if fragments.empty? opts = [jquery_method, jquery_opt, id].compact flunk "No JQuery call matches #{opts.inspect}" end if block begin in_scope, @selected = @selected, fragments yield ensure @selected = in_scope end end end |