This is really a webrat question, but I haven’t had any reaction to
this from the webrat group. Maybe someone here can offer a comment…
I’ve been fooling around with webrat view matchers in merb / cucumber
and I’m trying to figure out whether the block parameter in have_tag
actually does anything. I’ve tried passing a block with pure nonsense
in it and the interpreter just seems to accept it and ignore it as if
it doesn’t exist.
Initially I had hoped there was something like ‘with_tag’ you could
nest inside a block, but I guess that was a rails thing. However from
my quick look at the code, although with fairly limited ruby
experience, I got the impression that ‘have_tag’ passes any matching
markup it finds into the block as a parameter. But none of my
experiments have been able to confirm this.
Does anyone have first hand knowledge of / successful experience with
have_tag with a block?
nest inside a block, but I guess that was a rails thing. However from
my quick look at the code, although with fairly limited ruby
experience, I got the impression that ‘have_tag’ passes any matching
markup it finds into the block as a parameter. But none of my
experiments have been able to confirm this.
Does anyone have first hand knowledge of / successful experience with
have_tag with a block?
Not first hand experience, but I’m looking at the specs in webrat:
If you scroll down to describe “#have_tag”, you’ll see a couple of
examples. It looks like your instinct is at least close to correct.
Can you post an example of what you’re trying to do?
One of the things I was unsure about was whether I could mix both the
text content and the second tag inside the outer element. Turns out
that this works just fine with the test above. Also, have_tag
(‘div#registration_link’…) works just as well as have_tag(‘div’, :id
=> ‘registration_link’…)
I’m writing a similar kind of scenario and want to make sure I am
scoping my “assertion” (if you will) to the stuff inside the tag. The
idea is that all people to whom this page is addressed are on the
address line (but not necessarily the only thing on the address line.
So the first guess was:
joe, bob
recipients.split(/,\s*/).each do |recipient|
response.should have_tag(‘div[address-line]’, recipient)
end
Thanks David. Those specs are very instructive. I have no idea what I
was doing wrong before, but the behavior I’m seeing now is indeed
consistent with the specs and matches what I had understood from the
code I’d looked at (I suspect it’ll stop working as soon as I send
this ).
Actually my situation is slightly more complex than what the specs
cover. I have something like this -
and I’m testing it with a cucumber step that looks like this -
Then /^the response should contain a link to new user registration$/
do @response.should have_tag(‘div’, :id =>‘registration_link’, :content
=> 'New User? Register ') { |match|
match.should have_tag(‘a’, :href => ‘/User/register’, :content =>
‘here’)
}
end
One of the things I was unsure about was whether I could mix both the
text content and the second tag inside the outer element. Turns out
that this works just fine with the test above. Also, have_tag
(‘div#registration_link’…) works just as well as have_tag(‘div’, :id
=> ‘registration_link’…)
Mark.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.