Clojure - teste automatizado

Neste capítulo, vamos discutir as opções de teste automatizado fornecidas pelo Clojure.

Teste de aplicativos cliente

Para usar o teste para o framework Clojure, você deve usar as dependências localizadas em https://github.com/slagyr/speclj#manual-installation

Este URL fornece o specljframework, que é usado como um framework de teste baseado em dados de teste ou baseado em comportamento para Clojure. Você deve garantir o uso da estrutura Clojure 1.7.0 ao usar qualquer uma das bibliotecas 'speclj'. Por padrão, os arquivos de teste serão diferentes dos arquivos de código do Clojure e precisam ser colocados em um diretório 'spec'.

A seguir está um código de amostra para um arquivo de teste.

(ns change.core-spec
   (:require [speclj.core :refer :all]))
(describe "Truth"
   (it "is true"
   (should true))
   (it "is not false"
   (should-not false)))
(run-specs)

O seguinte deve ser observado sobre o código acima -

  • Primeiro, temos que garantir o uso da instrução 'require' para incluir todas as bibliotecas centrais na estrutura 'speclj'.

  • A seguir está a função 'descrever'. Isso é usado para fornecer uma descrição para o caso de teste que está sendo criado.

  • A próxima função é a função 'it', que é o caso de teste real. No primeiro caso de teste, a string “é verdadeiro” é o nome dado ao caso de teste.

  • Deve e não deve ser conhecido como assertions. Todas as afirmações começam com deveria. Deveria e não deveria são apenas duas das muitas afirmações disponíveis. Ambos assumem expressões que verificarão quanto à veracidade e falsidade, respectivamente.

Se você executar o caso de teste, obterá a seguinte saída. A saída mostra o tempo gasto em milissegundos para o caso de teste ser executado.

←[32m.←[0m←[32m.←[0m
Finished in 0.00014 seconds

Teste de aplicativos baseados na web

Seleniumé uma das principais estruturas usadas para testar aplicativos modernos baseados na web. Bibliotecas Clojure também estão disponíveis, as quais podem ser usadas para testar aplicativos baseados na web.

Vejamos como podemos usar as bibliotecas Selenium para testar aplicativos Clojure baseados na web.

Step 1- A primeira etapa é garantir que estamos usando a estrutura Ring e Compojure para criar um aplicativo baseado na web, que precisa ser testado. Vamos usar um dos exemplos de nossos capítulos anteriores. O código a seguir é um aplicativo da web simples, que exibe “Hello World” no navegador.

(ns my-webapp.handler
   (:require [compojure.core :refer :all]
      [compojure.route :as route]
      [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))
(defroutes app-routes
   (GET "/" [] "Hello World")
   (route/not-found "Not Found"))
(def app
   (wrap-defaults app-routes site-defaults))

Step 2 - Em seguida, certifique-se de fazer o download do arquivo jar de selênio https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 e inclua-o em seu classpath.

Step 3 - Certifique-se também de baixar o driver da web 'clj', que será usado para executar o teste da web no seguinte local.

https://clojars.org/clj-webdriver/versions/0.7.1

Step 4 - No diretório do seu projeto, crie outro diretório chamado features e crie um arquivo chamado 'config.clj'.

Step 5 - Em seguida, adicione o seguinte código ao arquivo 'config.clj' criado na etapa anterior.

ns clj-webdriver-tutorial.features.config)
(def test-port 3000)
(def test-host "localhost")
(def test-base-url (str "http://" test-host ":" test-port "/"))

O código acima basicamente diz ao framework de teste da web para testar o aplicativo, que é carregado no URL http://localhost:3000

Step 6 - Por fim, vamos escrever nosso código para realizar nosso teste.

(ns clj-webdriver-tutorial.features.homepage
   (:require [clojure.test :refer :all]
      [ring.adapter.jetty :refer [run-jetty]]
      [clj-webdriver.taxi :refer :all]
      [clj-webdriver-tutorial.features.config :refer :all]
      [clj-webdriver-tutorial.handler :refer [app-routes]]))
(ns clj-webdriver-tutorial.features.homepage
   (:require [clojure.test :refer :all]
      [ring.adapter.jetty :refer [run-jetty]]
      [clj-webdriver.taxi :refer :all]
      [clj-webdriver-tutorial.features.config :refer :all]
      [clj-webdriver-tutorial.handler :refer [app-routes]]))
(defn start-server []
   (loop [server (run-jetty app-routes {:port test-port, :join? false})]
      (if (.isStarted server)
         server
         (recur server))))
(defn stop-server [server]
   (.stop server))
(defn start-browser []
   (set-driver! {:browser :firefox}))
(defn stop-browser []
   (quit))
(deftest homepage-greeting
   (let [server (start-server)]
      (start-browser)
      (to test-base-url)
      (is (= (text "body") "Hello World"))
      (stop-browser)
      (stop-server server)))

O código acima irá realizar as seguintes ações -

  • Inicie o servidor para o aplicativo.
  • Abra o caminho raiz no navegador.
  • Verifique se a mensagem "Hello World" está presente na página.
  • Feche o navegador.
  • Desligue o servidor.