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