<?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>lucasfais.com &#187; ruby</title>
	<atom:link href="http://lucasfais.com/category/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://lucasfais.com</link>
	<description></description>
	<lastBuildDate>Fri, 05 Mar 2010 16:20:33 +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>multibyte/unicode_database.rb:37: [BUG] Segmentation fault  ruby 1.8.7 (uby 1.8.7 (2010-01-10 patchlevel 249)</title>
		<link>http://lucasfais.com/2010/03/05/unicode_database-rb37-bug-segmentation-fault-ruby-1-8-7-2010-01-10-patchlevel-249/</link>
		<comments>http://lucasfais.com/2010/03/05/unicode_database-rb37-bug-segmentation-fault-ruby-1-8-7-2010-01-10-patchlevel-249/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 12:27:29 +0000</pubDate>
		<dc:creator>Lucas Fais</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[bug]]></category>

		<guid isPermaLink="false">http://lucasfais.com/?p=103</guid>
		<description><![CDATA[Ontem, Eric Fer e eu tivemos este erro várias vezes enquanto tentavamos rodar os testes do projeto em que trabalhamos:

... activesupport/lib/active_support/multibyte/unicode_database.rb:37: [BUG] Segmentation fault
 ruby 1.8.7 (2010-01-10 patchlevel 249) ...

Detalhes sobre o problema aqui.
Resumo: Temos instalado o ruby 1.8.7 patch level 249. E, aparentemente, este é um bug presente nos patch levels 248 e 249.
Solução: [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem, <a href="http://twitter.com/ericfer">Eric Fer</a> e eu tivemos este erro várias vezes enquanto tentavamos rodar os testes do projeto em que trabalhamos:</p>
<pre class="terminal">
... activesupport/lib/active_support/multibyte/unicode_database.rb:37: [BUG] Segmentation fault
 ruby 1.8.7 (2010-01-10 patchlevel 249) ...
</pre>
<p>Detalhes sobre o problema <a href="http://redmine.ruby-lang.org/issues/show/2557">aqui</a>.</p>
<p>Resumo: Temos instalado o ruby 1.8.7 patch level 249. E, aparentemente, este é um bug presente nos patch levels 248 e 249.</p>
<p>Solução: Voltamos ao ruby 1.8.7 patch level 174. Tudo resolvido. </p>
<p>Logicamente, ficou bem mais fácil com <a href="http://rvm.beginrescueend.com/">RVM</a> <img src='http://lucasfais.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://lucasfais.com/2010/03/05/unicode_database-rb37-bug-segmentation-fault-ruby-1-8-7-2010-01-10-patchlevel-249/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agora sim! Completo com RVM</title>
		<link>http://lucasfais.com/2009/11/29/agora-sim-completo-com-rvm/</link>
		<comments>http://lucasfais.com/2009/11/29/agora-sim-completo-com-rvm/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 19:13:39 +0000</pubDate>
		<dc:creator>Lucas Fais</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[libxml-ruby]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://lucasfais.com/?p=84</guid>
		<description><![CDATA[No último post eu expliquei como instalar a gem do MySQL com o RVM em um ambiente 64 bits. A solução foi instalar o MySQL 64 bits já que o ruby instalado pelo RVM era 64 bits. Tudo estava funcionando normalmente.
Porém, instalando todas as gems necessárias para o projeto em que trabalho atualmente, tive problemas [...]]]></description>
			<content:encoded><![CDATA[<p>No <a href="/2009/11/26/gem-do-mysql-com-rvm/" target="_blank">último post</a> eu expliquei como instalar a gem do <a href="http://dev.mysql.com/downloads/" target="_blank">MySQL</a> com o <a href="http://rvm.beginrescueend.com/" target="_blank">RVM</a> em um ambiente 64 bits. A solução foi instalar o MySQL 64 bits já que o ruby instalado pelo RVM era 64 bits. Tudo estava funcionando normalmente.</p>
<p>Porém, instalando todas as gems necessárias para o projeto em que trabalho atualmente, tive problemas com a gem libxml-ruby: &#8220;Symbol not found: _xmlParserDebugEntities&#8221;. Este problema só aconteceu com o ruby 64 bits.</p>
<p>Estou utilizando o Mac OS X 10.5, mas acredito que se aplique para qualquer S.O. 64 bits.</p>
<p>Depois de muitas tentativas sem sucesso, decidi mudar a abordagem. Parti para instalação o ruby no RVM em 32 bits. Desta forma, tudo funcionou. Instalei várias gems, e nesse momento, estou rodando todos os meus projetos sem nenhum problema.</p>
<h3>Instalando o ruby no RVM em 32 bits</h3>
<p>No meu caso, vou utilizar a versão 1.8.7 do ruby. Caso deseje utilizar outra versão, apenas substitua 1.8.7 pela versão deseja nos comandos que forem executados.</p>
<p>Se você não tem o RVM instalado:</p>
<pre class="terminal">$ sudo gem install rvm
$ rvm-install</pre>
<p>Se você já tem o RVM instalado, verifique qual a arquitetura do ruby:</p>
<pre class="terminal">$ rvm 1.8.7
$ file $(which ruby)</pre>
<p>Se o resultado for diferente de &#8220;Mach-O executable i386&#8243;, remova o ruby instalado:</p>
<pre class="terminal">$ rvm remove 1.8.7</pre>
<p>O seu arquivo ~/.rvmrc deve ter o conteúdo abaixo. Caso ele não exista, crie.</p>
<pre class="terminal">rvm_archflags="-arch i386"</pre>
<p>Agora instale o ruby:</p>
<pre class="terminal">$ export ARCHFLAGS="-arch i386"; optflags="-arch i386" rvm install 1.8.7</pre>
<p>Para ter certeza, verifique a arquiterura do ruby instalado (deve ser &#8220;Mach-O executable i386&#8243;):</p>
<pre class="terminal">$ rvm 1.8.7
$ file $(which ruby)</pre>
<p>Para aqueles que desejam instalar a gem do MySQL, tenha certeza que o MySQL instalado é 32 bits:</p>
<pre class="terminal">$ file $(which mysql)</pre>
<p>Mais uma vez, o resultado deve ser  &#8221;Mach-O executable i386&#8243;. Caso não seja, <a href="http://dev.mysql.com/downloads/mysql" target="_blank">reinstale o MySQL</a>. Não se esqueça de baixar a versão x86.</p>
<p>Para instalar a gem do MySQL execute:</p>
<pre class="terminal">$ gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config</pre>
<p>A partir de agora, tudo deve funcionar normalmente. Instale todas as gems que você precisa.</p>
<p>Referências:<br />
<a href="http://www.nuxlli.com.br/2009/11/24/para-tudo-instale-o-rvm-antes/" target="_blank">http://www.nuxlli.com.br/2009/11/24/para-tudo-instale-o-rvm-antes/<br />
</a><a href="http://www.nuxlli.com.br/2009/11/24/rvm-onde-estou/" target="_blank">http://www.nuxlli.com.br/2009/11/24/rvm-onde-estou/<br />
</a><a href="http://rvm.beginrescueend.com/mysql/" target="_blank">http://rvm.beginrescueend.com/mysql/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lucasfais.com/2009/11/29/agora-sim-completo-com-rvm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gem do MySQL com RVM</title>
		<link>http://lucasfais.com/2009/11/26/gem-do-mysql-com-rvm/</link>
		<comments>http://lucasfais.com/2009/11/26/gem-do-mysql-com-rvm/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 01:47:50 +0000</pubDate>
		<dc:creator>Lucas Fais</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://lucasfais.com/?p=72</guid>
		<description><![CDATA[Sim, o autor deste blog continua vivo&#8230;
Peço desculpas aos raros leitores, mas este ano foi bastante corrido e, infelizmente, o blog ficou abandonado. Espero escrever com mais frequência.
Alguns dias atrás, o Éverton Ribeiro deu uma super dica em seu blog para quem trabalha com ruby: o Ruby Version Manager (a.k.a RVM). Com ele você pode [...]]]></description>
			<content:encoded><![CDATA[<p>Sim, o autor deste blog continua vivo&#8230;</p>
<p>Peço desculpas aos raros leitores, mas este ano foi bastante corrido e, infelizmente, o blog ficou abandonado. Espero escrever com mais frequência.</p>
<p>Alguns dias atrás, o <a href="http://www.nuxlli.com.br/sobre/">Éverton Ribeiro</a> deu uma <a href="http://www.nuxlli.com.br/2009/11/24/para-tudo-instale-o-rvm-antes/">super dica</a> em seu blog para quem trabalha com <em>ruby</em>: o <a href="http://rvm.beginrescueend.com">Ruby Version Manager</a> (<em>a.k.a</em> <strong>RVM</strong>). Com ele você pode instalar e gerenciar facilmente várias versões do <em>ruby</em> e criar <em>sets</em> de <em>gems</em> de acordo com as suas necessidades.</p>
<p>Hoje, tivemos problemas para instalar a <em>gem</em> do MySQL em uma versão do <em>ruby</em> instalado pelo <em>RVM</em>. Depois de várias tentativas e vasculhadas na internet, conseguimos entender o problema.</p>
<p>Por padrão, pelo menos no Mac OS X Leopard (64 bits), o <em>RVM</em> instala o <em>ruby</em> com arquitetura x86_64. Entretanto, o MySQL que tinhamos instalado era i386. Sendo assim, a <em>gem</em> simplesmente não funcionava, e exibia o seguinte erro ao tentar usá-la:</p>
<pre class="terminal">$ rake db:migrate
(in /private/tmp/mysql_test)
dyld: lazy symbol binding failed: Symbol not found: _mysql_init
Referenced from: /Users/lfais/.rvm/gems/ruby/1.8.7/gems/mysql-2.8.1/lib/mysql_api.bundle
Expected in: flat namespace

dyld: Symbol not found: _mysql_init
Referenced from: /Users/lfais/.rvm/gems/ruby/1.8.7/gems/mysql-2.8.1/lib/mysql_api.bundle
Expected in: flat namespace

Trace/BPT trap</pre>
<p><br/></p>
<h3>A solução</h3>
<p>Para verificar a arquitetura do MySQL e do <em>ruby</em>, respectivamente, execute:</p>
<pre class="terminal">$ file $(which mysql)
$ file $(which ruby)</pre>
<p>A solução foi instalar o MySQL com arquitetura x86_64 e reinstalar a <em>gem</em> do MySQL.<br />
Para isso execute os seguintes passos:</p>
<ol>
<li>Se você já tem o MySQL instalado, não esqueça de fazer backup de seus <em>databases</em> e da pasta do MySQL (geralmente /usr/local/mysql).</li>
<li>Faça <a href="http://dev.mysql.com/downloads/mysql/5.1.html">download</a> do MySQL para o seu S.O. Não esqueça que a arquitetura tem que ser x86_64. No meu caso, baixei o <a href="http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg">dmg para Mac OS X 10.5</a> com a verão 5.1.41.</li>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/installing.html">Instale ou atualize</a> o MySQL.</li>
<li>Coloque o seguinte conteúdo no seu arquivo ~/.rvmrc (caso não tenha, crie-o):</li>
<p>
<pre class="terminal">rvm_archflags="-arch x86_64"</pre>
</p>
<li>Caso tenha a <em>gem</em> do MySQL instalada, desinstale:</li>
<p>
<pre class="terminal">$ gem uninstall mysql</pre>
</p>
<li>Instale a gem do MySQL com o seguinte comando (lembre-se que utilizando o RVM <strong>não</strong> deve-se usar <strong>sudo</strong> para instalar gems):</li>
<p>
<pre class="terminal">$ export ARCHFLAGS="-arch x86_64" ; gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config</pre>
</p>
</ol>
<p>Com esses passos, tudo deve funcionar normalmente.<br />
Obrigado ao <a href="http://www.nuxlli.com.br/sobre/">Éverton</a> e ao <a href="http://twitter.com/ericfer">Eric Fer</a> que colaboraram para a resolução do problema.</p>
<p>Até a próxima!</p>
<p>Referências:<br />
<a href="http://rvm.beginrescueend.com/mysql/">http://rvm.beginrescueend.com/mysql/</a><br />
<a href="http://www.nuxlli.com.br/2009/11/24/para-tudo-instale-o-rvm-antes/">http://www.nuxlli.com.br/2009/11/24/para-tudo-instale-o-rvm-antes/</a><br />
<a href="http://www.nuxlli.com.br/2009/11/24/rvm-onde-estou/">http://www.nuxlli.com.br/2009/11/24/rvm-onde-estou/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lucasfais.com/2009/11/26/gem-do-mysql-com-rvm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Testando aplicações Rails com Shoulda e factory_girl</title>
		<link>http://lucasfais.com/2008/10/06/testando-aplicacoes-rails-com-shoulda-e-factory_girl/</link>
		<comments>http://lucasfais.com/2008/10/06/testando-aplicacoes-rails-com-shoulda-e-factory_girl/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 21:58:14 +0000</pubDate>
		<dc:creator>Lucas Fais</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[factory_girl]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[shoulda]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[unit]]></category>

		<guid isPermaLink="false">http://lucasfais.com/?p=21</guid>
		<description><![CDATA[No meu primeiro artigo, vou mostrar como testar aplicações Rails de forma simples utilizando Shoulda e factory_girl. Esta é apenas uma introdução, um &#8220;por onde começar&#8230;&#8221;.
Se você não gosta de fixtures, acha o Test:Unit muito básico ou nunca fez testes com aplicações em Rails: Este artigo foi feito sob medida pra você!
Shoulda é um plugin/gem [...]]]></description>
			<content:encoded><![CDATA[<p>No meu primeiro artigo, vou mostrar como testar aplicações Rails de forma simples utilizando <a href="http://www.thoughtbot.com/projects/shoulda">Shoulda</a> e <a href="http://www.thoughtbot.com/projects/factory_girl">factory_girl</a>. Esta é apenas uma introdução, um &#8220;por onde começar&#8230;&#8221;.</p>
<p>Se você não gosta de fixtures, acha o <em>Test:Unit</em> muito básico ou <strong>nunca fez testes</strong> com aplicações em Rails:<strong> Este artigo foi feito sob medida pra você!</strong></p>
<p><a href="http://www.thoughtbot.com/projects/shoulda">Shoulda</a> é um plugin/gem que adiciona alguns recursos poderosos ao conhecido <em>Test::Unit</em>. Com ele, faremos mais testes com menos linhas de código.</p>
<p><a href="http://www.thoughtbot.com/projects/factory_girl">factory_girl</a> é uma <em>gem</em> que facilita a criação de dados para testes. Aos invés de usarmos as antigas <em>fixtures</em>, usaremos algo, digamos, mais &#8220;sexy&#8221;, como a comunidade gosta de chamar.</p>
<p>Vamos direto a prática. O meu ambiente está configurado com Rails 2.1.1.</p>
<p>Crie uma aplicação Rails. Aqui estou usando MySQL:</p>
<pre class="terminal">$ rails my_cash -d mysql
$ cd my_cash/</pre>
<p>Agora instale o plugin do Shoulda. Você também pode optar por usar a gem. No meu caso, prefiro adicioná-lo ao projeto:</p>
<pre class="terminal">$ script/plugin install git://github.com/thoughtbot/shoulda.git</pre>
<p>Neste exemplo, vou criar uma aplicação bem simples para controlar gastos pessoais. Nela, poderei cadastrar minhas despesas e receitas (que chamarei de operações).</p>
<p>Gere um <em>scaffold</em> para o model operação:</p>
<pre class="terminal">$ ./script/generate scaffold Operation description:string category:string value:float</pre>
<p>Edite o arquivo config/database.yml e configure o seu banco de dados.<br />
Após isso, crie todos os databases:</p>
<pre class="terminal">$ rake db:create:all</pre>
<p>Agora execute um db:migrate para criar as tabelas no database development:</p>
<pre class="terminal">$ rake db:migrate</pre>
<p>Se tudo correu bem até aqui, você pode iniciar sua aplicação e conferir se tudo está funcionando corretamente:</p>
<pre class="terminal">$ ./script/server</pre>
<p>Acesse <a href="http://localhost:3000/operations">http://localhost:3000/operations</a> e adicione algumas operações. Vamos considerar que uma operação de valor positivo é uma receita, e valor negativo é despesa.</p>
<p>Você terá algo, mais ou menos, assim:</p>
<div id="attachment_42" class="wp-caption alignnone" style="width: 510px"><a href="http://lucasfais.com/wp-content/uploads/2008/10/operations.png"><img class="size-full wp-image-42" title="operations" src="http://lucasfais.com/wp-content/uploads/2008/10/operations.png" alt="Exemplo de operações" width="500" height="300" /></a><p class="wp-caption-text">Exemplo de operações</p></div>
<p>Vamos os testes!<br />
Edite o arquivo test/unit/operation_test.rb.</p>
<p>Uma operação deve ter, pelo menos, descrição e valor preenchidos. Para fazermos este teste utilizaremos uma macro adicionada pelo Shoulda chamada should_require_attributes:<br />
<script src="http://gist.github.com/13471.js" type="text/javascript"></script></p>
<p>Você pode rodar os testes:</p>
<pre class="terminal">$ rake test:units</pre>
<p>Eles vão falhar e você receberá uma mensagem, mais ou menos, assim:</p>
<pre class="terminal">1) Failure:
test: Operation should require description to be set. (OperationTest)
...
Operation allowed nil as a value for description.
...
2) Failure:
test: Operation should require value to be set. (OperationTest)
...
Operation allowed nil as a value for description.
...
2 tests, 2 assertions, 2 failures, 0 errors</pre>
<p>Os testes falharam porque ainda não colocamos no nosso <em>model</em> as validações necessárias. Mas veja que interessante. Temos mensagens bastante descritivas sobre os nossos testes:</p>
<p><strong>&#8220;Operation should require description to be set. Operation allowed nil as a value for description&#8221;.</strong></p>
<p>Está aí um dos grandes pontos fortes do Shoulda. Conseguimos fazer nossos testes ficarem bem próximos de uma especificação. Veremos mais sobre isso adiante.</p>
<p>Vamos editar o arquivo do app/models/operation.rb e adicionar as validações necessárias para evitar que o teste falhe: <script src="http://gist.github.com/13472.js" type="text/javascript"></script></p>
<p>Rode os testes novamente (<strong>rake test:units</strong>) e veja nosso novo resultado:</p>
<pre class="terminal">...
2 tests, 6 assertions, 0 failures, 0 errors</pre>
<p>Repare que “por baixo dos panos” o Shoulda criou 2 testes e 6 asserções para garantir que o os nosso model valida a presença dos atributos description e value. Tudo isso com apenas uma linha de código!</p>
<p>Shoulda tem várias macros como a que usamos em nossos testes. Elas tornam nossas classes de teste muito mais enxutas. Para conhecê-las acesse o <a href="http://www.thoughtbot.com/projects/shoulda">site do Shoulda</a>.</p>
<p>Antes de prosseguirmos com nossos testes com o Shoulda, vamos configurar o factory_girl. A partir de agora, precisaremos de alguns objetos <em>Operation</em>.</p>
<p>Instale a gem do factory_girl (como estou no Ubuntu, vou utilizar o <strong>sudo</strong> pra isso):</p>
<pre class="terminal">$ sudo gem install thoughtbot-factory_girl --source http://gems.github.com</pre>
<p>Agora precisamos informar ao Rails que nossa aplicação depende da gem factory_girl.<br />
Para isso, adicione a seguinte linha ao arquivo config/enviroment.rb, dentro do bloco <em>Rails::Initializer.run</em>:<br />
<script src="http://gist.github.com/14754.js" type="text/javascript"></script></p>
<p>Edite o arquivo test/test_helper.rb e comente a linha abaixo para desabilitar o uso de fixtures:<br />
 <script src="http://gist.github.com/14755.js" type="text/javascript"></script></p>
<p>Caso você tenha um projeto que utiliza <em>fixtures</em> e você não quer migrá-lo completamente para factory_girl, não comente a linha acima. Acredito que <em>fixtures</em> e <em>factories</em> podem trabalhar juntas sem problemas.</p>
<p>Crie o arquivo test/factories.rb e adicione o seguinte conteúdo:<br />
<script src="http://gist.github.com/14757.js" type="text/javascript"></script></p>
<p>Neste arquivo, nós definimos nossos objetos que poderemos usar nos nossos testes.</p>
<p>Agora sim. Com o factory_girl configurado e alguns objetos Operation já definidos, podemos prosseguir.<br />
 Edite o arquivo test/unit/operation_test.rb e insira os seguintes métodos:<br />
 <script src="http://gist.github.com/14758.js" type="text/javascript"></script></p>
<p>Nos dois primeiros métodos, estou apenas testando o retorno do valor da primeira operação, e a categoria da segunda operação. Nos dois últimos, estou testando se a operação é uma receita ou uma despesa.</p>
<p>Veja que em cada método estou recuperando um objeto da nossa <em>Factory</em> e fazendo um <em>assert</em>. Como eu disse no início, o Shoulda apenas adiciona funcionalidades ao <em>Test:Unit</em>. Mesmo assim, você ainda pode usar os recursos padrões.</p>
<p>Para que os testes funcionem, adicione os seguintes métodos no model <em>Operation</em> (app/models/operation.rb):<br />
<script src="http://gist.github.com/14759.js" type="text/javascript"></script></p>
<p>Rode os testes (<strong>rake test:units</strong>) e terá o seguinte resultado:</p>
<pre class="terminal">6 tests, 10 assertions, 0 failures, 0 errors</pre>
<h3><strong>Contextos</strong></h3>
<p>Contexto é um recurso muito interessante do Shoulda. Com ele podemos especificar situações e tornar os testes mais legíveis. Continue lendo, você já vai entender e gostar muito.</p>
<p>Vou fazer um pequeno refactoring nos nossos testes. Leia o código abaixo com calma: <script src="http://gist.github.com/14761.js" type="text/javascript"></script></p>
<p>Repare como eu especifiquei situações (contextos) que fazem meus testes serem lidos de uma forma bastante lógica.</p>
<p>Se você simular um erro você receberá uma mensagem parecida com essa:</p>
<pre class="terminal">1) Failure:

test: A valid operation with value less than zero should be expense. (OperationTest)
...</pre>
<p>Viu como tudo fica claro? Ficará melhor ainda.</p>
<p>Um dos recursos que mais gosto no Shoulda é a tarefa shoulda:list que ele adiciona ao rake. Execute:</p>
<pre class="terminal">$ rake shoulda:list</pre>
<p>Você terá um retorno assim:</p>
<pre class="terminal">Operation
  A valid operation should require description to be set.
  A valid operation should require value to be set.
  A valid operation should return its category.
  A valid operation should return its value.
  A valid operation with value greater than zero should be income.
  A valid operation with value less than zero should be expense.
OperationsController
  test_should_create_operation
  test_should_destroy_operation
  test_should_get_edit
  test_should_get_index
  test_should_get_new
  test_should_show_operation
  test_should_update_operation</pre>
<p>Nos testes do model <em>Operation</em> estamos usando Shoulda. Olhe como as mensagens estão muito legíveis!<br />
Nos testes do <em>OperationController</em> estão testes padrões, gerados pelo scaffold, utilizando apenas <em>Test:Unit</em>. Notam a diferença?</p>
<p>Você também pode testar seus controllers utilizando o Shoulda. Leia mais <a href="http://thoughtbot.com/projects/shoulda/tutorial/controllers">aqui</a>.</p>
<p>Testes com a Shoulda você pode imprimir e conferir junto ao seu cliente. Fica tudo muito claro.</p>
<p>Com o conteúdo apresentado aqui, você já pode testar grande parte das aplicações.<br />
Mas esta foi apenas uma introdução do que é possível fazer com Shoulda e factory_girl. </p>
<p>Encontre mais informações nos seguintes links:</p>
<ul>
<li><a href="http://thoughtbot.com/projects/shoulda/">Shoulda</a></li>
<li><a href="http://www.thoughtbot.com/projects/factory_girl/">factory_girl</a></li>
<li><a href="http://www.makemesimple.com/blog/2008/06/27/learncast1-bdd-leve-com-shoulda-testando-modelos-activerecord/">Learncast #1: BDD leve com Shoulda &#8211; testando modelos ActiveRecord</a></li>
<li><a href="http://www.nomedojogo.com/2008/10/01/shoulda-20/">Shoulda 2.0</a></li>
</ul>
<p>Fiquem à vontade para enviar dúvidas, críticas e sugestões.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucasfais.com/2008/10/06/testando-aplicacoes-rails-com-shoulda-e-factory_girl/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
