[rspec-users] Controller/View User Agent Strings

David Chelimsky
Thu, 15 Feb 2007 15:58:54 -0000

Wait - Steve - that was based on what''s in the trunk. It *might* work
w/ 0.7.5.1, but I haven''t tried it.

What version are you using?

On 2/15/07, David Chelimsky <dchelimsky at gmail.com>
wrote:
> Given this in views/layouts/person.rhtml:
>
> <%= stylesheet_link_tag(''ie'', :media =>
''screen'') if
> request.user_agent && request.user_agent =~ /msie/i %>
>
> The following passes for me:
>
> ===================================> context "layout for person w/
user_agent = msie" do
>   setup do
>     request.stub!(:user_agent).and_return(''msie'')
>     render ''layouts/person''
>   end
>
>   specify "should have msie stylesheet" do
>     response.should have_tag("link[href*=ie.css]")
>   end
>
>   specify "should not have firefox stylesheet" do
>     response.should_not have_tag("link[href*=firefox.css]")
>   end
>
> end
>
> context "layout for person w/ user_agent = firefox" do
>   setup do
>     request.stub!(:user_agent).and_return(''mozilla'')
>     render ''layouts/person''
>   end
>
>   specify "should have no link tag" do
>     response.should_not have_tag("link")
>   end
>
> end
> ===================================>
> Take a look at the assert_select cheat sheet for more info:
>
>
http://labnotes.org/svn/public/ruby/rails_plugins/assert_select/cheat/assert_select.html
>
> have_tag just wraps that w/ rspec syntax.
>
> Let me know if this helps.
>
> Cheers,
> David
>
> On 2/13/07, s.ross <cwdinfo at gmail.com> wrote:
> > Just checking. I guess it just seemed too easy :)
> >
> > What happens when this page renders is a tag like:
> >
> >
> >
> > Or something like that with the Rails asset tagging. What I want to
> > do is test that I''m responding to the user agent string
correctly
> > using a matcher that looks for the filename, but disregards the asset
> > tag:
> >
> > response.should have_tag(''link'', :attributes =>
{:href => /
> > application.css/})
> > response.should_not have_tag(''link'', :attributes
=> {:href => /ie.css/})
> >
> > However, the "should have" expectations always pass no
matter what.
> > Not coincidentally, the "should_not have" ones always fail.
> >
> > I can see, looking at the Rails plugin source that my syntax is
> > broken and that the have_tag expectation was meant more to determine
> > whether the tag exists and how many times it occurs. Is there a
> > matcher that peers into the tag the way the old Test::Unit assertions
> > did?
> >
> > Thanks
> >
> > On Feb 13, 2007, at 4:40 PM, David Chelimsky wrote:
> >
> > > On 2/13/07, s.ross <cwdinfo at gmail.com> wrote:
> > >> I have conditional logic in my view (I know, obligatory slap
on the
> > >> wrist) so that an add-on stylesheet is linked in for IE
users. The
> > >> code is:
> > >>
> > >>      <%= stylesheet_link_tag(''ie'',
:media => ''screen'') if
> > >> request.user_agent && request.user_agent =~ /msie/i
%>
> > >>
> > >> The spec is:
> > >>
> > >>    specify "should display index page" do
> > >>      get :index
> > >>      response.should_be_success
> > >>    end
> > >>
> > >> There is no user_agent in the request object passed to the
view. Now,
> > >> I can change all of this by simply:
> > >>
> > >> setup do
> > >>
request.stub!(:user_agent).and_return(''msie'')
> > >> end
> > >>
> > >> but I was wondering if there was a better way?
> > >
> > > That seems pretty simple to me. What is bugging you about it?
> > >
> > >>
> > >> Thanks,
> > >>
> > >> Steve
> > >> _______________________________________________
> > >> rspec-users mailing list
> > >> rspec-users at rubyforge.org
> > >> http://rubyforge.org/mailman/listinfo/rspec-users
> > >>
> > > _______________________________________________
> > > rspec-users mailing list
> > > rspec-users at rubyforge.org
> > > http://rubyforge.org/mailman/listinfo/rspec-users
> >
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
> >
>