assert_select with respond_to JS or xhr?

seb_guard wrote:

Hi everyone,

I am a bit confused with xhr? and respond_to.

I have the folloing code in my view to update the 'emails' ID
link_to_remote(image_tag("refresh"), :update => "emails",
    :url => { :action => "list_emails" })

in the controller side i have somthing like :
[..]
respond_to do |type|
        type.html { render :action 'list_emails' }
        type.js { render :partial => 'list_emails' }
end
[..]

The partial returns html code such as
[..]<ul><li>email1</li></li></ul> [..]

In my controller functional test
I do
[..]
xhr :get,:list_emails
assert_select "ul"
[..]

But `assert_select' did not find anything.
However if i changed my controller action (remove the respond_to and
replace with xhr?)
[..]
if request.xhr?
  render :partial => 'list_emails'
else
  render :action 'list_emails'
end
[..]

Then the assertion works perfectly.
Am i missing something ? Are not we supossed to migrate to the
respond_to structure ? wht would be the recommendation for this
situation ? stick with xhr?

thanks a lot

-sebastien

assert_select looks at the content-type returned and tests accordingly. If it is js then it thinks it's an rjs type response. I thought this was a bug, and filed a ticket when 1.2 was being finalised, but is apparently expected behaviour, I think on the basis that respond_to is asking what type of response the reqester wants.

However, it does make it tricky to test the above scenario (where you want the Ajax response to be just a partial, which is quite a common idiom IMHO). The best I've come up with is matching the @response.body with a RegExp

Hope this helps (a bit).
Chris