Blog do TaQ

Vim e Rspec

Publicado em Developer

Eu já havia visto algumas pessoas fazendo alguns outros scripts para integrar o Vim e o Rspec, mas ainda não havia encontrado o comportamento que queria, então decidi fazer um e ontem dediquei um tempo para o danado. Os fontes estão no Github, onde pode-se fazer o download do arquivo .zip ou pegar direto no site do Vim, onde já distribuo o dito cujo zipado.

O esquema é o seguinte: rodar o comando spec direto do Vim, abrindo os resultados em uma nova janela, com indicação visual através de cores (que obedecem o colorsheme atual) dos testes que "passaram" e dos que tiveram problemas, com a opção de dar Enter na linha onde se encontra o nome do arquivo, com a linha onde o erro ocorreu, e abrir o arquivo posicionando o cursor na referida linha.

O funcionamento do script é simples: o arquivo HTML resultante do processamento do comando spec é processado com uma folha de estilo XSL (por isso precisamos ter o xsltproc instalado) e transformado em conteúdo de texto puro que é processado através de um arquivo de sintaxe, dando-lhe cores que indicam os resultados dos testes.

Para instalar o script, é só fazer um clone usando o Git ou pegar direto o arquivo zipado e descompactar dentro do seu diretório ~/.vim (nhé, nem sei como isso funciona naquele outro sistema então não perguntem please) e fazer um source do script no seu .vimrc. Estou pensando se faço isso automático ou não, mas tenho medo que pareça intrusivo ... vamos ver. Enquanto isso, usem o source.

Após instalado, há dois comandos disponíveis:

  1. RunSpec, que vai rodar o comando spec apenas no arquivo corrente, desde que ele seja um *_spec.rb. Do contrário, vai ser mostrada uma mensagem de erro.
  2. RunSpecs, que no primeiro momento vai procurar um diretório spec dentro do diretório corrente, e se não encontrar, procura nos diretórios acima. Se encontrado, vai rodar o comando spec em todos os arquivos dentro desse diretório

Como é a primeira versão podem ter alguns bug, funcionalidades faltando ou não funcionando direito blá blá blá blá mas pelos testes que fiz aqui, o grosso da coisa está funcionando direito. Como exemplo, peguei o primeiro modelo do Rspec Basics da Peepcode e rodei para dar uma olhada:

 1 
 2 [WeathersController route generation]
 3 + should map #index
 4 + should map #new
 5 + should map #show
 6 + should map #edit
 7 + should map #update
 8 + should map #destroy
 9 
10 [WeathersController route recognition]
11 + should generate params for #index
12 + should generate params for #new
13 + should generate params for #create
14 + should generate params for #show
15 + should generate params for #edit
16 + should generate params for #update
17 + should generate params for #destroy
18 
19 [WeathersController responding to GET index]
20 + should expose all weathers as @weathers
21 
22 [WeathersController responding to GET index with mime type of xml]
23 + should render all weathers as xml
24 
25 [WeathersController responding to GET show]
26 + should expose the requested weather as @weather
27 
28 [WeathersController responding to GET show with mime type of xml]
29 + should render the requested weather as xml
30 
31 [WeathersController responding to GET new]
32 + should expose a new weather as @weather
33 
34 [WeathersController responding to GET edit]
35 + should expose the requested weather as @weather
36 
37 [WeathersController responding to POST create with valid params]
38 + should expose a newly created weather as @weather
39 + should redirect to the created weather
40 
41 [WeathersController responding to POST create with invalid params]
42 + should expose a newly created but unsaved weather as @weather
43 + should re-render the 'new' template
44 
45 [WeathersController responding to PUT udpate with valid params]
46 + should update the requested weather
47 + should expose the requested weather as @weather
48 + should redirect to the weather
49 
50 [WeathersController responding to PUT udpate with invalid params]
51 + should update the requested weather
52 + should expose the weather as @weather
53 + should re-render the 'edit' template
54 
55 [WeathersController responding to DELETE destroy]
56 + should destroy the requested weather
57 + should redirect to the weathers list
58 
59 [Weather]
60 + should create a new instance given valid attributes
61 + should create a new object given valid attribute
62 + should not create a new empty and valid object
63 + should have an error on zipcode
64 + should have an error on zipcode, removing zipcode
65 - should have an error on nil zipcode
66   expected 1 error on :zipcode, got 0
67   /home/taq/temp/rspec/forecaster/spec/models/weather_spec.rb:45:
68   it "should have an error on nil zipcode" do
69 
70 [WeathersHelper]
71 + should be included in the object returned by #helper
72 
73 [/weathers/edit.html.erb]
74 + should render edit form
75 
76 [/weathers/index.html.erb]
77 + should render list of weathers
78 
79 [/weathers/show.html.erb]
80 + should render attributes in <p>
81 
82 [/weathers/new.html.erb]
83 + should render new form
84 

Dando enter na linha onde está /home/taq/temp/rspec/forecaster/spec/models/weather_spec.rb:45, o arquivo é aberto em uma nova janela e o cursor é posicionado na linha 45. Divirtam-se. :-)


Tags:


Comentários

Sem nenhum comentário.

comments powered by Disqus

Twitter