JasminePubliquei durante o feriado um projeto em que estou trabalhando tem algum tempo. Fiz um executor de testes escritos com Jasmine baseado em .NET. Ele roda sobre o PhantomJS, que é um headless browser baseado em webkit super rápido e respeitado. Isso quer dizer que o runner que eu fiz também é baseado em webkit, e também é headless. Basicamente é uma ferramenta de linha de comando que você roda para obter os resultados dos seus testes feitos com Jasmine.

O uso é bastante simples, e está todo descrito no site do projeto, no Github. Você pode rodar ele sem nenhum parâmetro, e ele trabalha com convenções, ou passar um arquivo de configuração que indica onde estão os testes. Você também pode utilizar um arquivo de testes com html e testes do Jasmine, e ele vai rodar este arquivo e apresentar o resultado. Ou pode indicar exatamente quais arquivos rodar, passando o  caminho dos arquivos de JavaScript ou CoffeeScript que ele também executa.

Sim, roda CoffeeScript nativamente, lógico! Estou estudando a implementação do TypeScript. Foi por isso que fiz o compilador umas semanas atrás (na verdade um wrapper para .NET que roda o compilador original). Preciso voltar a olhar isso.

Já subi um Nuget para a ferramenta. Basicamente o que você faz é instalar ele via nuget, e já começar a usar.

A ferramenta também pode usar usada em um servidor de build, para suportar um ambiente de integração contínua. Em caso de falha de algum teste ou erros na execução ela retorna um código diferente de zero, o que permite falhar uma build. E retorna zero caso os testes passem.

Criei essa ferramenta porque, desde o dojo que fizemos na Barra em Outubro, com CoffeeScript e Jasmine (código aqui) fiquei impressionado com a facilidade para montar um ambiente completo para testes de CoffeeScript/Jasmine baseado em Ruby. E muita gente não tem Ruby instalado, principalmente quem está no Windows, então resolvi fazer um que suporte melhor o ambiente Windows/.NET. Agora preciso ver se há algum tipo de Guard.Net, para funcionar como o Guard do Ruby. Se alguém souber me avise.

Tentei iniciar o suporte para Mono no Linux, encontrei diversos problemas e desisti, por enquanto. O MonoDevelop não suporta Nuget, não suporta o formato de arquivo de solution do Visual Studio 2012, e não suporta .NET 4.5. Quem sabe se um dia isso andar por lá eu volto para olhar.

Veja o projeto aqui, e o nuget dele aqui. E depois me contem o que acharam, contribuam com pull requests e avisem de melhorias e bugs que encontrarem lá na página de issues do github dele.

 

PS: Como efeito colateral desse projeto acabei criando outro projeto, o GlobDir. Queria usar a sintaxe de glob nos arquivos de configuração da ferramenta, e o .NET não tem nenhuma biblioteca que faça isso. Encontrei um suporte inicial no Mono, e traduzi para essa biblioteca. O Glob é muito usado em arquivos do gitignore e hgignore, e também é usado no projeto original, no jasmine-headless-webkit. Nada mais natural que suportar ele aqui também. É um formato muito legal, gosto muito da ideia do duplo asterisco, por exemplo.