Clojure - Test automatizzati

In questo capitolo, discuteremo le opzioni di test automatizzato fornite da Clojure.

Test per applicazioni client

Per utilizzare il testing per il framework Clojure, devi usare le dipendenze che si trovano in https://github.com/slagyr/speclj#manual-installation

Questo URL fornisce il file specljframework, che viene utilizzato come framework di test basato sui dati di test o basato sul comportamento per Clojure. Devi assicurarti di usare il framework Clojure 1.7.0 quando usi una qualsiasi delle librerie 'speclj'. Per impostazione predefinita, i file di test saranno diversi dai file di codice Clojure e devono essere inseriti in una directory "spec".

Di seguito è riportato un codice di esempio per un file di prova.

(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)

Le seguenti cose devono essere annotate sul codice sopra:

  • Per prima cosa dobbiamo assicurarci di utilizzare l'istruzione "require" per includere tutte le librerie principali nel framework "speclj".

  • La prossima è la funzione "Descrivi". Viene utilizzato per fornire una descrizione per lo scenario di test da creare.

  • La funzione successiva è la funzione "it", che è il vero caso di test. Nel primo caso di test, la stringa "è vero" è il nome dato allo scenario di test.

  • Dovrebbe e non dovrebbe-non sono conosciuti come assertions. Tutte le affermazioni iniziano con dovrebbe. Dovrebbe e non dovrebbe sono solo due delle tante affermazioni disponibili. Entrambi prendono espressioni che cercheranno rispettivamente di veridicità e falsità.

Se esegui il test case, otterrai il seguente output. L'output mostra il tempo impiegato in millisecondi per l'esecuzione del test case.

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

Test per applicazioni basate sul Web

Seleniumè uno dei framework chiave utilizzati per testare le moderne applicazioni basate sul web. Sono disponibili anche librerie Clojure che possono essere utilizzate per testare applicazioni basate sul web.

Diamo un'occhiata a come possiamo usare le librerie Selenium per testare le applicazioni basate sul web Clojure.

Step 1- Il primo passo è assicurarsi di utilizzare il framework Ring e Compojure per creare un'applicazione basata sul Web, che deve essere testata. Usiamo uno degli esempi dei nostri capitoli precedenti. Il codice seguente è una semplice applicazione web, che visualizza "Hello World" nel browser.

(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 - Quindi assicurati di scaricare il file jar di selenio https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 e includilo nel tuo classpath.

Step 3 - Assicurati inoltre di scaricare il driver web "clj", che verrà utilizzato per eseguire il test web dal seguente percorso.

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

Step 4 - Nella directory del progetto, crea un'altra directory chiamata features e crea un file chiamato "config.clj".

Step 5 - Successivamente aggiungi il seguente codice al file "config.clj" creato nel passaggio precedente.

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

Il codice sopra in pratica dice al framework di test web di testare l'applicazione, che viene caricata all'URL http://localhost:3000

Step 6 - Infine, scriviamo il nostro codice per effettuare il nostro test.

(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)))

Il codice precedente eseguirà le seguenti azioni:

  • Avvia il server per l'applicazione.
  • Apri il percorso principale nel browser.
  • Controlla se il messaggio "Hello World" è presente nella pagina.
  • Chiudi il browser.
  • Spegni il server.