  
<div id="snippet_304" class="snippet">
  <h2><a href="/snippets/304-Test-functionality-in-isolation-with-Autospec" title="Test functionality in isolation with Autospec - Ruby - autotest, testing, bdd, tdd, autospec, zentest">Test functionality in isolation with Autospec</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted about 1 year ago by christian
          
  </div>

  <div class="body">
    <p>This configuration will make autospec run &#8220;spec/models/xyz_spec&#8221; when a file in &#8220;lib/xyz/ is modified&#8221;. No other tests are run.</p>
<p>Put the following code in ./.autotest:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="LibraryClassType">Autotest</span>.<span class="FunctionName">add_hook</span> <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>initialize</span> <span class="Keyword">do </span>|<span class="Variable">at</span>|
<span class="line-numbers">   2 </span>   at.<span class="FunctionName">clear_mappings</span>
<span class="line-numbers">   3 </span>   <span class="String"><span class="String">%w{</span>.svn .hg .git vendor<span class="String">}</span></span>.<span class="FunctionName">each</span> {|<span class="Variable">exception</span>| at.<span class="FunctionName">add_exception</span>(exception)}
<span class="line-numbers">   4 </span> 
<span class="line-numbers">   5 </span>   at.<span class="FunctionName">add_mapping</span>(<span class="String"><span class="String">%r%</span>^lib/xyz/.*<span class="UserDefinedConstant">\.</span>rb$<span class="String">%</span></span>) {
<span class="line-numbers">   6 </span>     at.<span class="FunctionName">files_matching</span> <span class="String"><span class="String">%r%</span>^spec/models/xyz_spec<span class="UserDefinedConstant">\.</span>rb$<span class="String">%</span></span>
<span class="line-numbers">   7 </span> <span class="LineComment"><span class="LineComment">#</span></span>
<span class="line-numbers">   8 </span> <span class="LineComment"><span class="LineComment">#</span> Uncomment if more tests are needed...</span>
<span class="line-numbers">   9 </span> <span class="LineComment"><span class="LineComment">#</span> +   at.files_matching %r%^spec/models/xyz_spec\.rb$%</span>
<span class="line-numbers">  10 </span> <span class="LineComment"><span class="LineComment">#</span></span>
<span class="line-numbers">  11 </span>   }
<span class="line-numbers">  12 </span> <span class="Keyword">end</span>
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/343-autotest">autotest</a>, <a href="/tags/552-testing">testing</a>, <a href="/tags/668-bdd">bdd</a>, <a href="/tags/669-tdd">tdd</a>, <a href="/tags/670-autospec">autospec</a>, <a href="/tags/344-zentest">zentest</a>
    
    
  </div>
</div>



  
<div id="snippet_134" class="snippet">
  <h2><a href="/snippets/134-How-to-use-RSpec-and-ZenTest-in-a-standalone-Ruby-project" title="How to use RSpec and ZenTest in a standalone Ruby project - Ruby - rspec, autotest, zentest, standalone, ruby">How to use RSpec and ZenTest in a standalone Ruby project</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted over 2 years ago by christian
          
  </div>

  <div class="body">
    <p>First install the RSpec and ZenTest gem:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ sudo gem install rspec zentest
</pre></p>


	<p>Next create the spec folder:
<pre class="active4d"><span class="line-numbers">   1 </span> $ cd project_folder
<span class="line-numbers">   2 </span> $ mkdir spec
</pre></p>


	<p>Save the following to <strong>spec/helper.rb</strong>:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Variable"><span class="Variable">$</span>LOAD_PATH</span>.<span class="FunctionName">unshift</span> <span class="LibraryClassType">File</span>.<span class="FunctionName">dirname</span>(<span class="Variable">__FILE__</span>) <span class="Operator">+</span> <span class="String"><span class="String">'</span>/..<span class="String">'</span></span>
<span class="line-numbers">   2 </span> 
<span class="line-numbers">   3 </span> <span class="Keyword">require</span> <span class="String"><span class="String">'</span>rubygems<span class="String">'</span></span>
<span class="line-numbers">   4 </span> <span class="Keyword">require</span> <span class="String"><span class="String">'</span>spec<span class="String">'</span></span>
<span class="line-numbers">   5 </span> <span class="LineComment"><span class="LineComment">#</span>require 'spec/rake/spectask' not needed, because ZenTest supports rspec now</span>
</pre></p>


	<p>Now create <strong>spec/transcoder_spec.rb</strong>, and add the following test to it:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">require</span> <span class="LibraryClassType">File</span>.<span class="FunctionName">dirname</span>(<span class="Variable">__FILE__</span>) <span class="Operator">+</span> <span class="String"><span class="String">'</span>/helper<span class="String">'</span></span>
<span class="line-numbers">   2 </span> <span class="Keyword">require</span> <span class="LibraryClassType">File</span>.<span class="FunctionName">dirname</span>(<span class="Variable">__FILE__</span>) <span class="Operator">+</span> <span class="String"><span class="String">'</span>/../transcoder.rb<span class="String">'</span></span>
<span class="line-numbers">   3 </span> 
<span class="line-numbers">   4 </span> context <span class="String"><span class="String">&quot;</span>Transcoder<span class="String">&quot;</span></span> <span class="Keyword">do</span>
<span class="line-numbers">   5 </span>   setup <span class="Keyword">do</span>
<span class="line-numbers">   6 </span> <span class="LineComment">    <span class="LineComment">#</span> Setup your stuff here</span>
<span class="line-numbers">   7 </span>   <span class="Keyword">end</span>
<span class="line-numbers">   8 </span>   
<span class="line-numbers">   9 </span>   it <span class="String"><span class="String">&quot;</span>should support 3gp format<span class="String">&quot;</span></span> <span class="Keyword">do</span>
<span class="line-numbers">  10 </span>     <span class="LibraryClassType">Transcoder</span>.<span class="FunctionName">convert</span>(<span class="String"><span class="String">&quot;</span>me_and_you.3gp<span class="String">&quot;</span></span>).<span class="FunctionName">should</span> <span class="Operator">==</span> <span class="BuiltInConstant">true</span>
<span class="line-numbers">  11 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  12 </span> <span class="Keyword">end</span>
</pre></p>


	<p>Let&#8217;s not forget the class we&#8217;re testing, put this code in <strong>lib/transcoder.rb</strong>:
<pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">class</span> <span class="TypeName">Transcoder</span>
<span class="line-numbers">   2 </span>   <span class="Keyword">def</span> <span class="FunctionName">initialize</span>
<span class="line-numbers">   3 </span>   <span class="Keyword">end</span>
<span class="line-numbers">   4 </span>   
<span class="line-numbers">   5 </span>   <span class="Keyword">def</span> <span class="FunctionName">self.convert</span>(<span class="FunctionArgument">file</span>)
<span class="line-numbers">   6 </span>     <span class="Keyword">return</span> <span class="BuiltInConstant">true</span>
<span class="line-numbers">   7 </span>   <span class="Keyword">end</span>
<span class="line-numbers">   8 </span> <span class="Keyword">end</span>
</pre></p>


	<p>Note that autotest automatically looks for your code in the lib folder.</p>


	<p>Now run the test with the zentest command:
<pre class="active4d"><span class="line-numbers">   1 </span> autotest
</pre></p>


	<p>Change your files and autotest will run the test again.</p>


	<p>Tip: Read <a href="http://ph7spot.com/articles/getting_started_with_autotest">Getting started with Autotest &#8211; Continuous Testing</a> and <a href="http://wincent.com/knowledge-base/Setting_up_autotest_to_use_Growl">Setting up autotest to use Growl on  OSX </a> for more information on how to increase your productivity.</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/342-rspec">rspec</a>, <a href="/tags/343-autotest">autotest</a>, <a href="/tags/344-zentest">zentest</a>, <a href="/tags/345-standalone">standalone</a>, <a href="/tags/8-ruby">ruby</a>
    
    
  </div>
</div>






