Vim e Rspec
Publicado em Developer
grep rails rspec ruby vim xsltproc
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 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. :-)
Comentários
Comentários fechados.
Sem nenhum comentário.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300