Clojure - Tests automatisés

Dans ce chapitre, discutons des options de test automatisé fournies par Clojure.

Test des applications client

Pour utiliser testing pour le framework Clojure, vous devez utiliser les dépendances situées sur https://github.com/slagyr/speclj#manual-installation

Cette URL fournit le specljframework, qui est utilisé comme framework de test piloté par les données de test ou par le comportement pour Clojure. Vous devez vous assurer que vous utilisez le framework Clojure 1.7.0 lorsque vous utilisez l'une des bibliothèques 'speclj'. Par défaut, les fichiers de test seront différents des fichiers de code Clojure et doivent être placés dans un répertoire 'spec'.

Voici un exemple de code pour un fichier de test.

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

Les choses suivantes doivent être notées à propos du code ci-dessus -

  • Nous devons d'abord nous assurer d'utiliser l'instruction 'require' pour inclure toutes les bibliothèques de base dans le framework 'speclj'.

  • Vient ensuite la fonction «décrire». Ceci est utilisé pour fournir une description du scénario de test en cours de création.

  • La fonction suivante est la fonction «it», qui est le cas de test réel. Dans le premier cas de test, la chaîne «est vrai» est le nom donné au scénario de test.

  • Devrait et ne devrait pas être connu comme assertions. Toutes les affirmations commencent par should. Devrait et ne devrait pas ne sont que deux des nombreuses affirmations disponibles. Ils prennent tous les deux des expressions qu'ils vérifieront respectivement pour la véracité et la fausseté.

Si vous exécutez le scénario de test, vous obtiendrez la sortie suivante. La sortie affiche le temps mis en millisecondes pour l'exécution du scénario de test.

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

Test des applications Web

Seleniumest l'un des principaux cadres utilisés pour tester les applications Web modernes. Des bibliothèques Clojure sont également disponibles et peuvent être utilisées pour tester des applications Web.

Voyons comment nous pouvons utiliser les bibliothèques Selenium pour tester les applications Web Clojure.

Step 1- La première étape consiste à nous assurer que nous utilisons le framework Ring et Compojure pour créer une application Web, qui doit être testée. Utilisons l'un des exemples de nos chapitres précédents. Le code suivant est une application Web simple, qui affiche «Hello World» dans le navigateur.

(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 - Ensuite, assurez-vous de télécharger le fichier de pot de sélénium https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 et incluez-le dans votre classpath.

Step 3 - Assurez-vous également de télécharger le pilote Web 'clj', qui sera utilisé pour exécuter le test Web à partir de l'emplacement suivant.

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

Step 4 - Dans votre répertoire de projet, créez un autre répertoire appelé features et créez un fichier appelé 'config.clj'.

Step 5 - Ensuite, ajoutez le code suivant au fichier 'config.clj' créé à l'étape précédente.

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

Le code ci-dessus indique essentiellement au framework de test Web de tester l'application, qui est chargée à l'URL http://localhost:3000

Step 6 - Enfin, écrivons notre code pour effectuer notre 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)))

Le code ci-dessus va prendre les actions suivantes -

  • Démarrez le serveur de l'application.
  • Ouvrez le chemin racine dans le navigateur.
  • Vérifiez si le message "Hello World" est présent sur la page.
  • Fermez le navigateur.
  • Arrêtez le serveur.