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:
- 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.
- 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 bugs, 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:
[WeathersController route generation]
+ should map #index
+ should map #new
+ should map #show
+ should map #edit
+ should map #update
+ should map #destroy
[WeathersController route recognition]
+ should generate params for #index
+ should generate params for #new
+ should generate params for #create
+ should generate params for #show
+ should generate params for #edit
+ should generate params for #update
+ should generate params for #destroy
[WeathersController responding to GET index]
+ should expose all weathers as @weathers
[WeathersController responding to GET index with mime type of xml]
+ should render all weathers as xml
[WeathersController responding to GET show]
+ should expose the requested weather as @weather
[WeathersController responding to GET show with mime type of xml]
+ should render the requested weather as xml
[WeathersController responding to GET new]
+ should expose a new weather as @weather
[WeathersController responding to GET edit]
+ should expose the requested weather as @weather
[WeathersController responding to POST create with valid params]
+ should expose a newly created weather as @weather
+ should redirect to the created weather
[WeathersController responding to POST create with invalid params]
+ should expose a newly created but unsaved weather as @weather
+ should re-render the 'new' template
[WeathersController responding to PUT udpate with valid params]
+ should update the requested weather
+ should expose the requested weather as @weather
+ should redirect to the weather
[WeathersController responding to PUT udpate with invalid params]
+ should update the requested weather
+ should expose the weather as @weather
+ should re-render the 'edit' template
[WeathersController responding to DELETE destroy]
+ should destroy the requested weather
+ should redirect to the weathers list
[Weather]
+ should create a new instance given valid attributes
+ should create a new object given valid attribute
+ should not create a new empty and valid object
+ should have an error on zipcode
expected 1 error on :zipcode, got 0
/home/taq/temp/rspec/forecaster/spec/models/weather_spec.rb:45:
it "should have an error on nil zipcode" do
[WeathersHelper]
+ should be included in the object returned by #helper
[/weathers/edit.html.erb]
+ should render edit form
[/weathers/index.html.erb]
+ should render list of weathers
[/weathers/show.html.erb]
+ should render attributes in <p>
[/weathers/new.html.erb]
+ should render new form
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. 🙂



