Geradores no Rails e RSpec-Rails

Geradores no Rails e RSpec-Rails
anderson.leite
anderson.leite

Compartilhe

O framework Ruby on Rails é conhecido por facilitar e dar mais produtividade ao desenvolvimento web, estando preparado para uma série de necessidades comuns desse tipo de desenvolvimento. O vídeo que tornou Ruby on Rails famoso fazia uso de uma série de geradores, no caso os scaffolds, para produzir uma aplicação baseada em Posts e Comentários.

Existem diversos geradores em Rails, sendo o mais conhecido o próprio scaffold, além de geradores para models, controllers e estrutura de plugins.

Um projeto bastante utilizado em aplicações Rails é o RSpec. O RSpec é uma ferramenta de BDD que possui, como tudo em Rails, algumas convenções de diretórios. Para trabalhar com o RSpec, precisamos colocar nossos testes em uma pasta chamada spec na raiz do projeto e então organizar nossos testes de models, controllers, helpers entre outros em pastas subsequentes. Além disso precisamos de um arquivo .rspec onde configuramos como serão visualizados os testes e outras opções.

Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Precisamos de uma estrutura pré definida para trabalhar com RSpec em uma aplicação Rails. É justamente dessa necessidade e da possibilidade de criar geradores que surge o projeto RSpec-Rails. Utilizamos o RSpec-Rails para gerar os templates de nossos testes.

Para entender mais a fundo o funcionamento de tudo isso, nada como analisar o próprio fonte do RSpec-Rails, que é disponibilizado no github.

Todo código dos geradores fornecidos fica no diretório lib/generators/rspec.

O primeiro gerador utilizado normalmente é o rails generate rspec:install. Esse gerador cria o diretório spec, um arquivo de configurações chamado spec/spec_helper.rb e o .rspec.

Todo gerador rails segue uma convenção de arquivos. Todo gerador possui uma pasta chama templates, onde encontram-se os arquivos a serem criados na aplicação. Além disso, junto com a pasta templates deve existir o arquivo nome_generator.rb (onde nome representa o nome do gerator em questão). Esse arquivo deve conter uma classe que herda de Rails::Generators::Base. Não deixe de ver o fonde do gerador rspec:install no github.

Seguindo a mesma linha, podemos criar geradores para várias partes da aplicação, como por exemplo para os testes de models do rspec. Os geradores aceitam parâmetros como é usado no gerador dos models rails generate rspec:model.

Esse gerador recebe o nome do model para criar o arquivo de teste, como pode ser visto no fonte, ou mesmo um atributo a mais como a opção de criação de fixtures, que não é feita por default como pode ser visto na classe Base.

 module Rspec module Generators class ModelGenerator < Base argument :attributes, :type => :array, :default => \[\], :banner => "field:type field:type" class\_option :fixture, :type => :boolean

def create\_model\_spec template 'model\_spec.rb', File.join('spec/models', class\_path, "#{file\_name}\_spec.rb") end

hook\_for :fixture\_replacement

def create\_fixture\_file if options```:fixture
 && options```:fixture\_replacement
.nil? template 'fixtures.yml', File.join('spec/fixtures', "#{table\_name}.yml") end end end end end 

Ao utilizar um projeto opensource você deve conhecer o que seu código faz, para assim, poder fazer as melhores escolhas e otimizações necessárias em cada situação. Analisar o código fonte de projetos no github ajuda muito na evolução de como programamos, analisando e entendendo como outros desenvolvedores pensaram para resolver problemas. Além disso, podemos contribuir com esses projetos e estar em contato com seus principais autores.

O Curso RR-75 | Ruby e Rails avançados: lidando com problemas do dia a dia mostra uma série de práticas avançadas no desenvolvimento de aplicações Ruby on Rails utilizando RSpec e outros frameworks.

Veja outros artigos sobre Programação