Jasmine é um dos mais populares frameworks de teste Javascript em estilo BDD. Decidi usá-lo no meu projeto Chpokk, construído em cima de FubuMVC. Aqui estão os passos que fiz, juntamente com algumas explicações para leigos.
Adicionando Jasmine ao seu projeto
É tão fácil quanto adicionar o pacote NuGet FubuMVC.TestRunner ao seu projeto. Depois disso, navegue para /testing/suites/whatever, e veja uma página esverdeada quase vazia que diz “0 specs”. Pronto! O Jasmine está instalado.
O que há nos bastidores?
Depois de adicionar o pacote, você descobrirá um arquivo zip chamado fubumvc-testrunner.zip na sua pasta de conteúdo Fubu. Esse arquivo é um pedaço de funcionalidade que se adiciona ao aplicativo principal. Com a primeira solicitação da web, o zip é extraído para uma subpasta. Vamos ver o que temos lá.
A pasta WebContent é mapeada para a raiz do seu aplicativo. A subpasta Shared contém o arquivo Application.spark, que será a página mestre para todas as de teste e das ligações do arquivo.
Dê uma olhada no seguinte trecho do arquivo Application.spark:
<Stylesheet href="jasmine.css" />
<Script src="fubumvc-testrunner" />
Esses tags não parecem familiares. Seus significados são explicados nas ligações do arquivo:
<element name="Stylesheet">#this.Asset('@href');</element>
<element name="Script">#this.Asset('@src');</element>
this.Asset () é um método que adiciona um script/css à lista de ativos da página. Note que ele não produz nenhuma saída; para escrever todos os scripts (juntamente com suas dependências), você tem que chamar.
this.WriteScriptTags()
ou, usando as nossas ligações, apenas:
<Scripts />
A View atual é chamada de Run.spark, e está localizada na pasta suites. É muito simples:
<viewdata model="FubuMVC.TestRunner.Suites.RunSuiteViewModel" />
<content:title>${Model.Suite}</content:title>
<content:scripts>
<Script src="${Model.Suite}" />
</content:scripts>
Há duas áreas de conteúdo: uma é o título da página, a outra apenas adiciona um script (ou um conjunto de scripts, veja mais adiante) à página. Como decidimos qual script adicionar? Nós o fazemos a partir da URL. Devido a alguns modelos de ligações mágicas (mais processamento interno FBU), a última parte da URL é mapeada para a propriedade Suite do modelo.
Adicionando o primeiro teste
Para utilizar o Asset Pipeline do Fubu, coloquei meu script de teste para a pasta /Contents/scripts da minha Web.
Aqui está o meu sampletest.js:
describe("First test", function() {
it("should fail", function() {
expect(true).toBeFalsy();
});
});
Como um praticante real em TDD, estou criando primeiro um teste de falha . Mamãe ficaria tão orgulhosa de mim!
Depois de salvar este arquivo, navego para /testing/suites/sampletest.js, e vejo um teste falhando. WIN!
Lidando com um problema do mundo real
Ter todos os seus códigos nos testes é bom, mas em algum momento um gerente pode querer que você mude alguns deles para os arquivos de produção. Então, precisaremos incluir vários arquivos em nossos testes. Veremos como fazê-lo.
Vamos criar um outro arquivo chamado realstuff.js, e o colocaremos na pasta Content/scripts:
function arewegood() {
return false;
}
Em seguida, criaremos um arquivo de texto simples, chamado tests.script.config, e o colocaremos na raiz de nossa aplicação. Esse arquivo irá conter o nosso conjunto de definições de script. Vamos colocar a seguinte linha lá:
tests includes realstuff.js, sampletest.js
Agora, vamos usar o nome do conjunto na URL: /testing/suites/tests. Se olharmos para a fonte, veremos que ambos os scripts são carregados. Podemos colocar outro script no nosso conjunto de arquivo de configuração, e seremos capazes de executar uma suite diferente, com uma URL diferente.
O último passo é modificar o nosso teste para que ele dependa da “produção” de código:
describe("First test", function() {
it("should fail", function() {
expect(arewegood()).toBeTruthy();
});
});
Por hoje é isso, eu ainda tenho que fazer esse teste passar.
Update
@jmarnold me disse que o Serenity faz tudo isso e um monte de outras coisas legais. Acho que vou ter que apagar tudo isso e começar do zero.
?
Texto original disponível em http://ivonna.biz/blog/2012/2/19/getting-started-with-jasmine-tests-in-FubuMVC-applications.aspx