Máscara de suítes de teste heterogêneas com bolo

Às vezes, você não consegue encaixar todos os seus conjuntos de testes em um único executor. O código do lado do cliente deve ser executado em um cliente real, não em jsDom. O código do nó não pode ser executado em um navegador. Assim que você pedir a colegas de trabalho ou colaboradores para executarem dois comandos para testar, você falha.

O que fazer? Use as ferramentas disponíveis para facilitar a vida de todos.

Neste exemplo, usarei cake e um Cakefile, embora você possa usar make e Makefile facilmente se não estiver usando CoffeeScript.

Em seu Cakefile, faça estas tarefas stub: teste , teste: frontend e teste: nó . Se você tiver outros conjuntos de testes aplicáveis, crie tarefas vazias para eles também. O teste será semelhante a este:

task 'test', -> 
testFrontEnd
(err, stdout) ->
process
.exit(1) if err
testNode
(err, stdout) ->
process
.exit(1) if err

Veja o que eu fiz lá? Chamadas de teste em série. Você pode facilmente torná-los paralelos ou usar muitos padrões mais limpos para organizar o fluxo do código. Este é apenas um exemplo.

Você também notará que chamei duas funções privadas: testFrontEnd e testNode . Você estaria certo em adivinhar que test: frontEnd apenas expõe uma chamada para testFrontEnd para Cake, já que test: node faz a coisa semelhante.

As peças finais estão realmente executando os testes. Meu testFrontEnd é parecido com isto:

testFrontEnd = (cb) ->
console
.log 'Running front-end tests'
exec "PHANTOMJS_BIN=#{__dirname}/node_modules/phantomjs/lib/phantom/bin/phantomjs testacular start #{__dirname}/tests/testacular.conf.js --single-run", (err, stdout, stderr) ->
console
.error err if err
console
.log stdout
cb
?(err, stdout)

Essa confusão com PHANTOMJS_BIN é puramente para o bem do testacular. Ele assume que o PhantomJS está em um local. Se não estiver lá, você deve defini-lo. Grosso, mas necessário quando você trabalha em equipe e não pode forçar as pessoas a instalar o PhantomJS em um determinado local.

Agora, para executar suas suítes de teste, você pode apenas

cake test

e todas as suas suítes vão rodar e os bebês vão parar de chorar e ah, o arco-íris duplo que você vai ter.