Como configurar Specljs para seu código ClojureScript

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!