Motivação
Recentemente, eu finalmente queria configurar uma estrutura de teste para meu código ClojureScript, mas acabei perdendo horas tentando encontrar o material e a documentação relevantes.
Decidi trabalhar com Specljs (e speclj para meu código Clojure). A primeira coisa importante a saber é que ambos são gerados a partir do mesmo repositório hospedado no GitHub . Há também clojurescript.test de cemerick se você preferir a sintaxe core.test. A configuração é a mesma, exceto para o comando test e as dependências /: require-entries.
Pré-requisitos
Na minha opinião, é melhor usar o PhantomJS para testes. Não tentei nenhuma outra solução e não conheço outra; Deixe-me saber se você encontrar alternativas.
Configurando o arquivo de projeto
Adicionando specljs
A primeira coisa que precisamos é adicionar a dependência:
:profiles {:user {:plugins [[specljs "2.7.4"]]}}
Teste automático
Normalmente, você deseja colocar seus testes em outro diretório que não o seu código-fonte e deseja executar os testes automaticamente em tempo de compilação. Isso pode ser feito para adicionar uma nova entrada em: cljsbuild: builds:
{:source-paths ["cljs" "test-cljs"]
:compiler { ...}
:notify-command ["phantomjs" "phantom/unit-test.js" "phantom/tests.html"]}
O comando de notificação é executado toda vez que você compila com essa entrada de construção específica.
comandos de teste de cljsbuild
Além disso, ou alternativamente, você também pode adicionar a entrada de comandos de teste (dentro de: cljsbuild), embora eu tenha achado que não tem efeito em minha configuração, por qualquer motivo:
:test-commands {"tests" ["phantomjs" "phantom/unit-test.js" "phantom/tests.html"]}}
Arquivos de suporte
Para executar o teste, precisamos de dois arquivos adicionais, para serem colocados dentro do diretório “phantom” (ou qualquer outro, certifique-se de ajustar as referências em seu arquivo project.clj).
Um é necessário para iniciar o phantomjs e dizer a ele o que fazer (unit-test.js) e o outro carrega o script (tests.html). Eu postei os dois nesta entrada essencial .
Como escrever seus arquivos de teste
Esse é um dos principais obstáculos. A parte crítica é que você precisa solicitar specljs.core, ou então obterá um erro phantomjs sem sentido impedindo-o de executar seus testes.
Aqui está um exemplo de declaração de namespace:
(ns my-project.core-test
(:require specljs.core)
(:require-macros [specljs.core :refer [describe it should]]))
Claro que você pode adicionar qualquer outra macro specljs / speclj dentro da lista: refer. Consulte a página specljs para obter mais instruções.
Bom teste!