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 promocional da Alura, com chamada para um evento ao vivo no dia 12 de fevereiro às 18h30, com os dizeres

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