À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.