Forum: RSpec Test HTML output from Rails helper

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Thomas W. Steen (Guest)
on 2008-10-18 13:06
(Received via mailing list)
Hi

I'm using RSpec in with Ruby on Rails. I've made a helper module
method that generates some HTML and would like to create a rspec test
to validate this HTML. I can of cause use regex to validate it as a
string, but would much rather validate it by traversing the DOM and
checking that the elements I expect is present. Any pointers?

/thomas
Scott T. (Guest)
on 2008-10-18 13:51
(Received via mailing list)
On Oct 18, 2008, at 4:40 AM, Thomas W. Steen wrote:

> Hi
>
> I'm using RSpec in with Ruby on Rails. I've made a helper module
> method that generates some HTML and would like to create a rspec
> test to validate this HTML. I can of cause use regex to validate it
> as a string, but would much rather validate it by traversing the DOM
> and checking that the elements I expect is present. Any pointers?

No - that's not really an option.  The rails stack has no idea about a
DOM.

One option, though, is to stub methods and use message expectations.
For instance, if you had a helper like the following:

module MyHelper
   def my_method(a_name)
     link_to(a_name, {:controller => "foo", :action => "foo"})
   end
end

You'd be able to write a spec like the following:

it "should link with the correct name" do
   helper.should_receive(:link_to).with("foo", {:controller =>
"foo", :action => "foo"})
   helper.my_method("foo")
end

Hope that helps,

Scott
Pat M. (Guest)
on 2008-10-18 17:16
(Received via mailing list)
Scott T. <removed_email_address@domain.invalid> writes:

> No - that's not really an option.  The rails stack has no idea about a
> DOM.

Hrm...he's just generating HTML, he should be able to use Hpricot.
Does have_tag work with plain strings, or only in examples where there's
a response body?  If it's the latter, we should make it work with plain
strings as well.  But Hpricot would certainly be useful I would think.


> You'd be able to write a spec like the following:
>
> it "should link with the correct name" do
>   helper.should_receive(:link_to).with("foo", {:controller =>  "foo",
> :action => "foo"})
>   helper.my_method("foo")
> end

I don't like this, I don't think you're testing anything here.

Pat
Nick H. (Guest)
on 2008-10-18 19:35
(Received via mailing list)
On 2008-10-18, at 09:16, Pat M. wrote:
>
> Pat

Hi Pat. I'm interested to hear how you'd spec that helper method,
because some of specs are similar to what Scott proposed, and I'm
always looking to improve them.

Cheers,
Nick
Mark W. (Guest)
on 2008-10-18 19:43
(Received via mailing list)
On Sat, Oct 18, 2008 at 6:16 AM, Pat M. <removed_email_address@domain.invalid> 
wrote:


> Does have_tag work with plain strings
>

Yep, it does. That's how I spec #to_amcharts. :)

///ark
Zach D. (Guest)
on 2008-10-18 20:19
(Received via mailing list)
On Sat, Oct 18, 2008 at 11:34 AM, Nick H. <removed_email_address@domain.invalid>
wrote:
>>> end
>>
>> I don't like this, I don't think you're testing anything here.
>>
>> Pat
>
> Hi Pat. I'm interested to hear how you'd spec that helper method, because
> some of specs are similar to what Scott proposed, and I'm always looking to
> improve them.


I'm pretty sure Pat is simply suggesting:

  it "should link with the correct name" do
     helper.my_method("foo").should have_tag("a[href=?]", the_path,
"foo")
  end

If my_method returns a string then have_tag will work. If my_method
returns an object that responds to "body" then it will also work (this
is how response.should have_tag('...') works as well,

--
Zach D.
http://www.continuousthinking.com
http://www.mutuallyhuman.com
Scott T. (Guest)
on 2008-10-18 22:55
(Received via mailing list)
On Oct 18, 2008, at 9:16 AM, Pat M. wrote:

>>> and checking that the elements I expect is present. Any pointers?
> strings as well.  But Hpricot would certainly be useful I would think.
>

Yeah.  +1.  Not sure why I didn't think of that.

Scott
Ashley M. (Guest)
on 2008-10-19 07:30
(Received via mailing list)
On Oct 18, 2008, at 10:50 am, Scott T. wrote:

> No - that's not really an option.  The rails stack has no idea about
> a DOM.
>
> One option, though, is to stub methods and use message
> expectations.  For instance, if you had a helper like the following:


Hi Scott

Another option would be Hpricot[1], which makes manipulating HTML
easier than CSV data.

Ashley

[1] http://code.whytheluckystiff.net/hpricot/

--
http://www.patchspace.co.uk/
http://aviewfromafar.net/
Pat M. (Guest)
on 2008-10-19 20:12
(Received via mailing list)
"Zach D." <removed_email_address@domain.invalid> writes:

>>>>  helper.my_method("foo")
>
> I'm pretty sure Pat is simply suggesting:
>
>   it "should link with the correct name" do
>      helper.my_method("foo").should have_tag("a[href=?]", the_path, "foo")
>   end

Yup

Pat
This topic is locked and can not be replied to.