<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ArthurGeek.net &#187; tdd</title>
	<atom:link href="http://www.arthurgeek.net/tag/tdd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.arthurgeek.net</link>
	<description>Rails, Mac... e Rock'n Roll!</description>
	<lastBuildDate>Sat, 20 Dec 2008 23:25:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Test Helpers</title>
		<link>http://www.arthurgeek.net/test-helpers/</link>
		<comments>http://www.arthurgeek.net/test-helpers/#comments</comments>
		<pubDate>Mon, 04 Jun 2007 18:40:00 +0000</pubDate>
		<dc:creator>ArthurGeek</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://www.arthurgeek.net/2008/04/03/test-helpers</guid>
		<description><![CDATA[Desde que entrei no mundo do Test-Driven-Development, venho colecionando alguns helpers, específicos para testes. Estes helpers me ajudam a não-ficar-se-repetindo (DRY ).
Acompanhe a lista de helpers que eu passei a utilizar.

Temos os já consagrados deny, assert_invalid, assert_difference e assert_no_difference. Estes 2 últimos, já fazem parte do trunk do Rails 2.0. Tem também 2 helpers que [...]]]></description>
			<content:encoded><![CDATA[<p>Desde que entrei no mundo do <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test-Driven-Development</a>, venho colecionando alguns helpers, específicos para testes. Estes helpers me ajudam a não-ficar-se-repetindo (<a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"><span class="caps">DRY</span></a> ).</p>
<p>Acompanhe a lista de helpers que eu passei a utilizar.</p>
<p><span id="more-65"></span></p>
<p>Temos os já consagrados <em>deny</em>, <em>assert_invalid</em>, <em>assert_difference</em> e <em>assert_no_difference</em>. Estes 2 últimos, já fazem parte do trunk do Rails 2.0. Tem também 2 helpers que eu criei, e um que eu reescrevi.</p>
<h3>Códigos</h3>
<p>Estes métodos vão dentro do arquivo test/test_helper.rb</p>
<pre class="rails"><code><span class="kw1">def</span> deny<span class="br0">(</span>condition, message=<span class="st0">""</span><span class="br0">)</span>
  assert !condition, message
<span class="kw1">end</span>
 
<span class="kw1">def</span> assert_invalid<span class="br0">(</span>record, message=<span class="st0">""</span><span class="br0">)</span>
  deny record.<span class="me1">valid</span>?, message
<span class="kw1">end</span>
 
<span class="kw1">def</span> assert_difference<span class="br0">(</span>expression, difference = <span class="nu0">1</span>, &amp;block<span class="br0">)</span>
  expression_evaluation = <span class="kw3">lambda</span> <span class="br0">{</span> <span class="kw3">eval</span><span class="br0">(</span>expression, block.<span class="kw3">binding</span><span class="br0">)</span> <span class="br0">}</span>
  original_value        = expression_evaluation.<span class="kw5">call</span>
  <span class="kw1">yield</span>
  <span class="kw5">assert_equal</span> original_value + difference, expression_evaluation.<span class="kw5">call</span>
<span class="kw1">end</span>
 
<span class="kw1">def</span> assert_no_difference<span class="br0">(</span>expression, &amp;block<span class="br0">)</span>
  assert_difference expression, <span class="nu0">0</span>, &amp;block
<span class="kw1">end</span>
 
<span class="kw1">def</span> assert_select_errors<span class="br0">(</span>*messages<span class="br0">)</span>
  assert_select <span class="st0">"div#errorExplanation"</span> <span class="kw1">do</span>
    assert_select <span class="st0">"ul"</span> <span class="kw1">do</span>
      assert_select <span class="st0">"li"</span> , <span class="re3">:count</span> =&gt; messages.<span class="kw5">size</span>
      <span class="nu0">1</span>.<span class="me1">upto</span><span class="br0">(</span>messages.<span class="kw5">size</span><span class="br0">)</span> <span class="kw1">do</span> |num|
        assert_select <span class="st0">"li:nth-child(#{num})"</span>, <span class="st0">"#{messages[num-1]}"</span>
      <span class="kw1">end</span>
    <span class="kw1">end</span>
  <span class="kw1">end</span>
<span class="kw1">end</span>
 
<span class="kw1">def</span> assert_select_form<span class="br0">(</span>&amp;block<span class="br0">)</span>
  assert_select <span class="st0">"div.form"</span> <span class="kw1">do</span>
    assert_select <span class="st0">"dl"</span> <span class="kw1">do</span>
      <span class="kw1">yield</span>
      assert_select <span class="st0">"dd"</span>
    <span class="kw1">end</span>
  <span class="kw1">end</span>
<span class="kw1">end</span>
 
<span class="kw1">def</span> assert_redirected_to<span class="br0">(</span>options = <span class="br0">{</span><span class="br0">}</span>, message=<span class="kw2">nil</span><span class="br0">)</span>
  <span class="kw1">super</span>
  follow_redirect
  assert_response <span class="re3">:success</span>
<span class="kw1">end</span></code></pre>
<h3>Uso</h3>
<h4>assert_difference</h4>
<pre class="rails"><code><span class="kw1">def</span> test_should_destroy
  assert_difference <span class="st0">"User.count"</span>, <span class="nu0">-1</span> <span class="kw1">do</span>
    <span class="kw5">delete</span> <span class="re3">:destroy</span>, <span class="re3">:id</span> =&gt; <span class="nu0">1</span>
  <span class="kw1">end</span>
<span class="kw1">end</span>
 
<span class="kw1">def</span> test_should_create
  assert_difference <span class="st0">"User.count"</span> <span class="kw1">do</span>
    post <span class="re3">:create</span>, <span class="re3">:user</span> =&gt; <span class="br0">{</span><span class="br0">}</span>
  <span class="kw1">end</span>
<span class="kw1">end</span></code></pre>
<h4>assert_no_difference</h4>
<pre class="rails"><code><span class="kw1">def</span> test_should_update
  assert_no_difference <span class="st0">"User.count"</span> <span class="kw1">do</span>
    put <span class="re3">:update</span>, <span class="re3">:id</span> =&gt; <span class="nu0">1</span>, <span class="re3">:user</span> =&gt; <span class="br0">{</span><span class="br0">}</span>
  <span class="kw1">end</span>
<span class="kw1">end</span></code></pre>
<h4>assert_invalid</h4>
<pre class="rails"><code><span class="kw1">def</span> test_should_require_name
  user = User.<span class="me1">create</span><span class="br0">(</span><span class="re3">:name</span> =&gt; <span class="kw2">nil</span><span class="br0">)</span>
  assert_invalid user
<span class="kw1">end</span></code></pre>
<h4>deny</h4>
<pre class="rails"><code><span class="kw1">def</span> test_should_require_name
  user = User.<span class="me1">create</span><span class="br0">(</span><span class="re3">:name</span> =&gt; <span class="kw2">nil</span><span class="br0">)</span>
  deny user.<span class="me1">valid</span>?
<span class="kw1">end</span></code></pre>
<h4>assert_select_form</h4>
<pre class="rails"><code><span class="kw1">def</span> test_should_get_new
  assert_select_form <span class="kw1">do</span>
    assert_select <span class="st0">"dt:nth-child(1)"</span> <span class="kw1">do</span>
      assert_select <span class="st0">"label"</span>, <span class="st0">"Name"</span>
    <span class="kw1">end</span>
  <span class="kw1">end</span>
<span class="kw1">end</span></code></pre>
<h4>assert_select_errors</h4>
<pre class="rails"><code><span class="kw1">def</span> test_should_display_errors
  user = User.<span class="me1">create</span><span class="br0">(</span><span class="re3">:name</span> =&gt; <span class="kw2">nil</span>, <span class="re3">:surname</span> =&gt; <span class="kw2">nil</span><span class="br0">)</span>
  assert_select_errors <span class="st0">"Name can't be blank"</span>, <span class="st0">"Surname can't be blank"</span>
<span class="kw1">end</span></code></pre>
<p>E o <em>assert_redirected_to</em> chama o helper original, e usa o follow_redirect para saber se tudo ocorreu bem com o redirect.</p>
<p>Ah, e se você ainda não entrou nessa de <span class="caps">TDD</span>, dê uma olhada <a href="http://simplesideias.com.br/tdd-no-rails-unit-tests/">neste artigo</a> escrito pelo <a href="http://simplesideias.com.br/">Nando Vieira</a> sobre Unit Tests. Muito boa referência em português!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arthurgeek.net/test-helpers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
