<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Rspec on Bridge</title><link>https://quarternotecoda.com/tags/rspec/</link><description>Recent content in Rspec on Bridge</description><generator>Hugo -- 0.160.1</generator><language>en-us</language><lastBuildDate>Wed, 03 Mar 2010 00:00:00 +0000</lastBuildDate><atom:link href="https://quarternotecoda.com/tags/rspec/index.xml" rel="self" type="application/rss+xml"/><item><title>Rails Controller Specs with users, roles and nested routes</title><link>https://quarternotecoda.com/posts/2010-03-03-rails-controller-specs-with-users-roles-and-nested-routes/</link><pubDate>Wed, 03 Mar 2010 00:00:00 +0000</pubDate><guid>https://quarternotecoda.com/posts/2010-03-03-rails-controller-specs-with-users-roles-and-nested-routes/</guid><description>&lt;p&gt;I&amp;rsquo;ve long put off testing my controllers because of user authentication and nested controllers, dealing with stubs, etc.&lt;/p&gt;
&lt;p&gt;But today, a fully working test!&lt;/p&gt;
&lt;p&gt;As background, Advertisers have many trackers and the routes look like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60add5"&gt;ActionController&lt;/span&gt;&lt;span style="color:#666"&gt;::&lt;/span&gt;&lt;span style="color:#60add5"&gt;Routing&lt;/span&gt;&lt;span style="color:#666"&gt;::&lt;/span&gt;&lt;span style="color:#60add5"&gt;Routes&lt;/span&gt;&lt;span style="color:#666"&gt;.&lt;/span&gt;draw &lt;span style="color:#007020;font-weight:bold"&gt;do&lt;/span&gt; &lt;span style="color:#666"&gt;|&lt;/span&gt;map&lt;span style="color:#666"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; map&lt;span style="color:#666"&gt;.&lt;/span&gt;resources &lt;span style="color:#517918"&gt;:advertisers&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;do&lt;/span&gt; &lt;span style="color:#666"&gt;|&lt;/span&gt;advertisers&lt;span style="color:#666"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; advertisers&lt;span style="color:#666"&gt;.&lt;/span&gt;resources &lt;span style="color:#517918"&gt;:trackers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To set everything up in the specs, I included all the files in the spec/support directory and used &lt;a href="http://mocha.rubyforge.org/"&gt;Mocha&lt;/a&gt; as my mock framework&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60add5"&gt;Dir&lt;/span&gt;&lt;span style="color:#666"&gt;[&lt;/span&gt;&lt;span style="color:#60add5"&gt;File&lt;/span&gt;&lt;span style="color:#666"&gt;.&lt;/span&gt;expand_path(&lt;span style="color:#60add5"&gt;File&lt;/span&gt;&lt;span style="color:#666"&gt;.&lt;/span&gt;join(&lt;span style="color:#60add5"&gt;File&lt;/span&gt;&lt;span style="color:#666"&gt;.&lt;/span&gt;dirname(&lt;span style="color:#007020"&gt;__FILE__&lt;/span&gt;),&lt;span style="color:#4070a0"&gt;&amp;#39;support&amp;#39;&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;**&amp;#39;&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;*.rb&amp;#39;&lt;/span&gt;))&lt;span style="color:#666"&gt;].&lt;/span&gt;each {&lt;span style="color:#666"&gt;|&lt;/span&gt;f&lt;span style="color:#666"&gt;|&lt;/span&gt; &lt;span style="color:#007020"&gt;require&lt;/span&gt; f}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60add5"&gt;Spec&lt;/span&gt;&lt;span style="color:#666"&gt;::&lt;/span&gt;&lt;span style="color:#60add5"&gt;Runner&lt;/span&gt;&lt;span style="color:#666"&gt;.&lt;/span&gt;configure &lt;span style="color:#007020;font-weight:bold"&gt;do&lt;/span&gt; &lt;span style="color:#666"&gt;|&lt;/span&gt;config&lt;span style="color:#666"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; config&lt;span style="color:#666"&gt;.&lt;/span&gt;mock_with &lt;span style="color:#517918"&gt;:mocha&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then I set up my factories (&lt;a href="http://railscasts.com/episodes/158-factories-not-fixtures"&gt;rather than fixtures&lt;/a&gt;) using &lt;a href="http://github.com/thoughtbot/factory_girl"&gt;Factory Girl&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>