<?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>ruby on rails factory girl on random thoughts</title><link>https://awesomeprogrammer.com/categories/ruby-on-rails-factory-girl/</link><description>Recent content in ruby on rails factory girl on random thoughts</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 25 Sep 2012 00:00:00 +0000</lastBuildDate><atom:link href="https://awesomeprogrammer.com/categories/ruby-on-rails-factory-girl/index.xml" rel="self" type="application/rss+xml"/><item><title>Using Factory Girl in development</title><link>https://awesomeprogrammer.com/blog/2012/09/25/using-factory-girl-in-development/</link><pubDate>Tue, 25 Sep 2012 00:00:00 +0000</pubDate><guid>https://awesomeprogrammer.com/blog/2012/09/25/using-factory-girl-in-development/</guid><description><![CDATA[<p>There is a time when you need to put some random data in your database. Maybe build up pretty frontend or manually test some features. I was using rake tasks that with a little help from <a href="http://faker.rubyforge.org/">Faker</a>, at least until last few days - I needed to upgrade my tasks, but I mean - I had my test factories that were up-to-date, so I thought - why not use them? And so I did ;). Below is sample rake tasks that build a forum structure:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span>require <span style="color:#e6db74">&#39;factory_girl&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>namespace <span style="color:#e6db74">:db</span> <span style="color:#66d9ef">do</span>
</span></span><span style="display:flex;"><span>  desc <span style="color:#e6db74">&#34;Build me a forum!&#34;</span>
</span></span><span style="display:flex;"><span>  task <span style="color:#e6db74">:populate</span> <span style="color:#f92672">=&gt;</span> <span style="color:#e6db74">:environment</span> <span style="color:#66d9ef">do</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># here maybe you want to delete stuff?</span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># User.destroy_all or whatever suits your needs</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  require <span style="color:#66d9ef">Rails</span><span style="color:#f92672">.</span>root<span style="color:#f92672">.</span>join(<span style="color:#e6db74">&#39;spec/factories.rb&#39;</span>) <span style="color:#75715e"># Here I keep my factories, it also loads Faker gem</span>
</span></span><span style="display:flex;"><span>  user_pool <span style="color:#f92672">=</span> <span style="color:#f92672">[]</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># I&#39;m overriding some FactoryGirl sequences so it doesn&#39;t mess with my validation</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ae81ff">10</span><span style="color:#f92672">.</span>times { user_pool <span style="color:#f92672">&lt;&lt;</span> <span style="color:#66d9ef">FactoryGirl</span><span style="color:#f92672">.</span>create(<span style="color:#e6db74">:user</span>, <span style="color:#e6db74">:login</span> <span style="color:#f92672">=&gt;</span> <span style="color:#66d9ef">Faker</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Internet</span><span style="color:#f92672">.</span>user_name,<span style="color:#e6db74">:email</span> <span style="color:#f92672">=&gt;</span> <span style="color:#66d9ef">Faker</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Internet</span><span style="color:#f92672">.</span>email)<span style="color:#f92672">.</span>id }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># This factory for example will also create forum and sections for the forums that I use</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">User</span><span style="color:#f92672">.</span>all<span style="color:#f92672">.</span>each <span style="color:#66d9ef">do</span> <span style="color:#f92672">|</span>user<span style="color:#f92672">|</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">10</span><span style="color:#f92672">.</span>times { <span style="color:#66d9ef">FactoryGirl</span><span style="color:#f92672">.</span>create(<span style="color:#e6db74">:topic</span>, <span style="color:#e6db74">:user</span> <span style="color:#f92672">=&gt;</span> user, <span style="color:#e6db74">:title</span> <span style="color:#f92672">=&gt;</span> <span style="color:#66d9ef">Faker</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Lorem</span><span style="color:#f92672">.</span>sentence) }
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># And this factory just pusts posts for users from pool that I declared before</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">Topic</span><span style="color:#f92672">.</span>all<span style="color:#f92672">.</span>each <span style="color:#66d9ef">do</span> <span style="color:#f92672">|</span>topic<span style="color:#f92672">|</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">5</span><span style="color:#f92672">.</span>times { <span style="color:#66d9ef">FactoryGirl</span><span style="color:#f92672">.</span>create(<span style="color:#e6db74">:post</span>, <span style="color:#e6db74">:postable</span> <span style="color:#f92672">=&gt;</span> topic, <span style="color:#e6db74">:user_id</span> <span style="color:#f92672">=&gt;</span> user_pool<span style="color:#f92672">.</span>sample) }
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">end</span>
</span></span></code></pre></div><p>I think it&rsquo;s much better approach that building new tasks from scratch. Just keep in mind that you may ovrride some attributes (eg. if you are validating uniqness) and you should be just fine.</p>
]]></description><content:encoded><![CDATA[<p>There is a time when you need to put some random data in your database. Maybe build up pretty frontend or manually test some features. I was using rake tasks that with a little help from <a href="http://faker.rubyforge.org/">Faker</a>, at least until last few days - I needed to upgrade my tasks, but I mean - I had my test factories that were up-to-date, so I thought - why not use them? And so I did ;). Below is sample rake tasks that build a forum structure:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span>require <span style="color:#e6db74">&#39;factory_girl&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>namespace <span style="color:#e6db74">:db</span> <span style="color:#66d9ef">do</span>
</span></span><span style="display:flex;"><span>  desc <span style="color:#e6db74">&#34;Build me a forum!&#34;</span>
</span></span><span style="display:flex;"><span>  task <span style="color:#e6db74">:populate</span> <span style="color:#f92672">=&gt;</span> <span style="color:#e6db74">:environment</span> <span style="color:#66d9ef">do</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># here maybe you want to delete stuff?</span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># User.destroy_all or whatever suits your needs</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  require <span style="color:#66d9ef">Rails</span><span style="color:#f92672">.</span>root<span style="color:#f92672">.</span>join(<span style="color:#e6db74">&#39;spec/factories.rb&#39;</span>) <span style="color:#75715e"># Here I keep my factories, it also loads Faker gem</span>
</span></span><span style="display:flex;"><span>  user_pool <span style="color:#f92672">=</span> <span style="color:#f92672">[]</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># I&#39;m overriding some FactoryGirl sequences so it doesn&#39;t mess with my validation</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ae81ff">10</span><span style="color:#f92672">.</span>times { user_pool <span style="color:#f92672">&lt;&lt;</span> <span style="color:#66d9ef">FactoryGirl</span><span style="color:#f92672">.</span>create(<span style="color:#e6db74">:user</span>, <span style="color:#e6db74">:login</span> <span style="color:#f92672">=&gt;</span> <span style="color:#66d9ef">Faker</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Internet</span><span style="color:#f92672">.</span>user_name,<span style="color:#e6db74">:email</span> <span style="color:#f92672">=&gt;</span> <span style="color:#66d9ef">Faker</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Internet</span><span style="color:#f92672">.</span>email)<span style="color:#f92672">.</span>id }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># This factory for example will also create forum and sections for the forums that I use</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">User</span><span style="color:#f92672">.</span>all<span style="color:#f92672">.</span>each <span style="color:#66d9ef">do</span> <span style="color:#f92672">|</span>user<span style="color:#f92672">|</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">10</span><span style="color:#f92672">.</span>times { <span style="color:#66d9ef">FactoryGirl</span><span style="color:#f92672">.</span>create(<span style="color:#e6db74">:topic</span>, <span style="color:#e6db74">:user</span> <span style="color:#f92672">=&gt;</span> user, <span style="color:#e6db74">:title</span> <span style="color:#f92672">=&gt;</span> <span style="color:#66d9ef">Faker</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Lorem</span><span style="color:#f92672">.</span>sentence) }
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># And this factory just pusts posts for users from pool that I declared before</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">Topic</span><span style="color:#f92672">.</span>all<span style="color:#f92672">.</span>each <span style="color:#66d9ef">do</span> <span style="color:#f92672">|</span>topic<span style="color:#f92672">|</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ae81ff">5</span><span style="color:#f92672">.</span>times { <span style="color:#66d9ef">FactoryGirl</span><span style="color:#f92672">.</span>create(<span style="color:#e6db74">:post</span>, <span style="color:#e6db74">:postable</span> <span style="color:#f92672">=&gt;</span> topic, <span style="color:#e6db74">:user_id</span> <span style="color:#f92672">=&gt;</span> user_pool<span style="color:#f92672">.</span>sample) }
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">end</span>
</span></span></code></pre></div><p>I think it&rsquo;s much better approach that building new tasks from scratch. Just keep in mind that you may ovrride some attributes (eg. if you are validating uniqness) and you should be just fine.</p>
]]></content:encoded></item></channel></rss>