assert_select for <p><b>text</b>value</p>

I have the following html
<p><b>text</b>value</p>
I can use
assert_select "p>b", "text"
to check the text portion, and
assert_select "p", "value"
to check that the value appears in a <p>. I cannot work out how to
check that the two are in the same <p>. I have used assert_select for
much more complex tasks but my mind seems to have gone blank and
google has not provided an example of this type.

Any help would be much appreciated.

Colin

Any thoughts anyone?

Colin

Colin Law wrote:

I have the following html
<p><b>text</b>value</p>
I can use
assert_select "p>b", "text"
to check the text portion, and
assert_select "p", "value"
to check that the value appears in a <p>. I cannot work out how to
check that the two are in the same <p>. I have used assert_select for
much more complex tasks but my mind seems to have gone blank and
google has not provided an example of this type.

Any help would be much appreciated.

First off: you shouldn't ever be using <b> tags. That's 1990s physical
styling. That's *bad*. You should be using a semantically named <span>
instead. But you probably knew that already.

Now to your question...I think I'd use assert_select 'p', :html =>
'<b>text</b>value'. Does that help?

Colin

Best,

Pass a block to assert_select, perhaps?

assert_select "p", /value/ do
  assert_select "b", "text"
end

Chris

Colin Law wrote:

I have the following html
<p><b>text</b>value</p>
I can use
assert_select "p>b", "text"
to check the text portion, and
assert_select "p", "value"
to check that the value appears in a <p>. I cannot work out how to
check that the two are in the same <p>. I have used assert_select for
much more complex tasks but my mind seems to have gone blank and
google has not provided an example of this type.

Any help would be much appreciated.

First off: you shouldn't ever be using <b> tags. That's 1990s physical
styling. That's *bad*. You should be using a semantically named <span>
instead. But you probably knew that already.

Yes I know, it was generated by a rails scaffold some years ago if I
remember correctly. It is a rarely used admin page so I have not got
round to re-factoring it yet. It is all a matter of priorities of
course. Also of course this is one case where re-factoring may cause
existing tests to fail.

Now to your question...I think I'd use assert_select 'p', :html =>
'<b>text</b>value'. Does that help?

Yes of course, I don't think I have ever had to use :html, it always
seems like a bit of a cop-out but it should fix my problem.

Many thanks

Colin

I had considered that and decided it would give me problems if there
were another p with the right value, but without the b text? However,
having looked at the docs again it should in fact pass all p elements
with that value to the block, so the inner assert should be satisfied
if any p with the right value has a matching b. So I think you are
right, it should work. I will give it a go.

Many thanks

Colin

For the record, that worked fine.

Thanks again

Colin