Cairo Noleto

Usando Factory Girl em seus testes

| Comments

Hoje quem desenvolve em Ruby On Rails tem nas mãos as poderosas ferramentas de testes, sejam eles para desenvolvimento orientado a testes ou orientado a comportamentos. E no início nós usávamos fixtures, que são arquivos que contém um amontoado de dados que serão usados em nossos testes.

Junto com a evolução dessas ferramentas nasceram os fixtures replacements. Nasceram para suprir a necessidade de organização e praticidade na utilização de fixtures. Atualmente temos Machinist, Factory Girl, Object Daddy, Dataset, Fixjour e FixtureReplacement. Certamente existem outros, mas esses são os mais famosos e usados.

Hoje vou mostrar como você pode usar o Factory Girl em seus testes/especificações.

Para instalar o Factory Girl:

gem install thoughtbot-factory_girl

Depois você tem que configurar no seu environment o uso da gem:

config.gem :thoughtbot-factory_girl, :lib => :factory_girl, :source => "http://gems.github.com"

Depois de configurado, vamos a criação de suas factories. Por padrão, o Factory Girl carrega automaticamente em seus testes as factories que se encontram em test/factories/*.rb, spec/factories/*.rb ou você pode criar todos os seus factories em um único arquivo e colocar em test/factories.rb ou spec/factories.rb. Você pode criar todos os seus factories em um único arquivo ou separar por model (O que eu acho mais organizado).

Antes de usar o Factory Girl nos seus testes você deve definir como cada model deve funcionar:

1
2
3
4
Factory.define :user do |factory|
  factory.name => "Cairo"
  factory.surname => "Noleto"
end

Você pode ter outras definições, por exemplo:

1
2
3
4
5
Factory.define :admin, :class => User do |factory|
  factory.name => "Administrador"
  factory.surname => "Cairo Noleto"
  factory.admin => true
end

Você pode fazer vários tipos de factories, um para cada situação que você precisar, é mais fácil para fazer a manutenção.

Depois que você define suas factories é hora de realmente brincar com elas ;)

1
2
user = Factory.build(:user)
user_admin = Factory.build(:admin)

Quando você usa build, ele constroi um objeto não salvo.

1
2
user = Factory.create(:user)
user_admin = Factory.create(:admin)

Ao utilizar create, você está criando um objeto salvo.

Você pode criar uma hash com os atributos:

1
admin_attributes = Factory.attributes_for(:admin)

Você pode definir associações:

1
2
3
4
Factory.define :picture do |factory|
  factory.name "Random name"
  factory.association :user, :factory => :user
end

Basicamente o Factory Girl é isso, dessa forma você já pode abandonar as fixtures. Existe mais opções de uso do Factory Girl que você pode olhar a documentação oficial.

Comments