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