Ir para o conteúdo
ou

Software livre Brasil

 Voltar a Blogosfera d...
Tela cheia Sugerir um artigo

Thiago Freire: Fixtures suck, Machinist for the rescue!

29 de Maio de 2009, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 946 vezes

Quem usa muito fixtures sabe que elas costumam dar bastante dor de cabeça: a separação entre os dados do teste (nas fixtures) e o teste em si fazem com que você tenha que absorver dois contextos pra entender o que está acontecendo, nomeação das fixtures geralmente não ajuda, e o pior de tudo é que seus testes ficam mais difíceis de manter e quebradiços, e muita coisa pode quebrar quando você altera uma fixture. Fixtures suck, and you were lied to.

Pra substituir fixtures e sanar esses problemas surgiram várias bibliotecas que te ajudam a criar, nos seus testes, modelos ActiveRecord com dados pré-definidos de forma simples e prática.

Entre as várias opções, se destacam Factory Girl e Machinist. Factory Girl é feita por ninguém menos que Thoughtbot. Machinist é mais simples e tem uma sintaxe mais elegante, e é sobre ela que eu vou falar um pouco.

[Continue lendo]

Nota: Este guest post foi escrito por Elomar França.

Quem usa muito fixtures sabe que elas costumam dar bastante dor de cabeça: a separação entre os dados do teste (nas fixtures) e o teste em si fazem com que você tenha que absorver dois contextos pra entender o que está acontecendo, nomeação das fixtures geralmente não ajuda, e o pior de tudo é que seus testes ficam mais difíceis de manter e quebradiços, e muita coisa pode quebrar quando você altera uma fixture. Fixtures suck, and you were lied to.

Pra substituir fixtures e sanar esses problemas surgiram várias bibliotecas que te ajudam a criar, nos seus testes, modelos ActiveRecord com dados pré-definidos de forma simples e prática.

Entre as várias opções, se destacam Factory Girl e Machinist. Factory Girl é feita por ninguém menos que Thoughtbot. Machinist é mais simples e tem uma sintaxe mais elegante, e é sobre ela que eu vou falar um pouco.

O que é Machinist

É uma gem que te permite criar os objetos que você precisa pros seus testes nos próprios testes, gerando objetos populados com base em blueprints (modelos) que você define. Ao invés de fazer isso:

ou isso:

Você pode fazer assim:

Melhor, não? Machinist gera os dados pros campos que você não liga e constrói as associações, pra que você só se preocupe com os dados que importam pro teste. Você diz como o Machinist vai fazer isso com os blueprints.

Instalando

Instale como uma gem

sudo gem install notahat-machinist --source http://gems.github.com

E no seu environments/test.rb:

config.gem 'notahat-machinist', :lib => 'machinist', :source => 'http://gems.github.com'

Ou como um plugin

./script/plugin install git://github.com/notahat/machinist.git

Crie um arquivo 'blueprints.rb' na sua pasta de spec (ou test), onde você vai definir seus blueprints, e requira ele no seu spechelper.rb (ou testhelper.rb ou env.rb)

require File.join(File.dirname(__FILE__), 'blueprint')

E no bloco before ou setup de seus testes, adicione:

config.before(:each) { Sham.reset }

Definindo seus blueprints

Blueprints são definidos chamando o método blueprint no seu modelo.

Para valores simples, é só passar como argumento. Para valores que precisam ser calculados, como uma associação, você pode passar um bloco:

author { User.make }

Quando o nome da associação é o mesmo nome do modelo, Machinist gera um modelo automaticamente - o "post" no blueprint de Comment é um atalho pra "post { Post.make }".

Sham e Faker

Quase sempre precisamos gerar sequências ou dados que não podem ser repetir, como logins e emails. Machinist cuida disso com Sham, uma classe que te permite gerar atributos únicos aleatórios.

Sham.name { (1..10).map { ('a'..'z').to_a.rand } }

Pra gerar um valor, Sham.name. O Sham taí pra garantir que você vai ter sempre a mesma sequência de valores quando seus testes rodarem e você não vai ter valores duplicados.

Sham trabalha muito bem junto com Fixtuless data with machinist and sham


Fonte: http://feedproxy.google.com/~r/freireag/~3/vsxI4zuim-A/fixtures-suck-machinist-for-the-rescue

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.