Как писать каскадные совпадения RSpec - PullRequest
1 голос
/ 19 мая 2011

Прямо сейчас у меня есть следующий кусок кода:

RSpec::Matchers.define :include_an_html_tag do |tag|
  tag = Regexp.escape(tag.to_s)

  match do |html|
    html.to_s =~ %r[<#{tag}( [^>]+)?>.*?</#{tag}>]m
  end
end

RSpec::Matchers.define :have_html_attributes do |tag, attributes_hash|
  match do |html|
    attributes_hash.all? do |k,v|
      html.to_s =~ %r[<#{Regexp.escape tag.to_s}( [^>]+)? #{Regexp.escape k.to_s}\="#{Regexp.escape v.to_s}"( [^>]+)?>]m
    end
  end
end

html.should include_an_html_tag(:a)
html.should include_an_html_tag(:script)

html.should have_html_attributes(:a, {'data-remote' => 'true', 'data-method' => 'post'})

и работает довольно хорошо.

Что я хочу сделать, так это чтобы каскадеры соответствовали следующим образом:

html.should include_an_html_tag(:a).with_html_attributes('data-remote' => 'true', 'data-method' => 'post')

Есть ли способ добиться последовательности в пользовательских матчах?

1 Ответ

0 голосов
/ 19 мая 2011
...