Clojure - Pruebas automatizadas
En este capítulo, analicemos las opciones de prueba automatizadas proporcionadas por Clojure.
Pruebas para aplicaciones cliente
Para usar las pruebas para el marco Clojure, debe usar las dependencias ubicadas en https://github.com/slagyr/speclj#manual-installation
Esta URL proporciona la specljframework, que se utiliza como un marco de prueba basado en datos de prueba o basado en comportamiento para Clojure. Debe asegurarse de usar el marco Clojure 1.7.0 cuando use cualquiera de las bibliotecas 'speclj'. De forma predeterminada, los archivos de prueba serán diferentes de los archivos de código de Clojure y deben colocarse en un directorio de 'especificaciones'.
A continuación se muestra un código de muestra para un archivo de prueba.
(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)
Se deben tener en cuenta las siguientes cosas sobre el código anterior:
Primero tenemos que asegurarnos de usar la declaración 'require' para incluir todas las bibliotecas centrales en el marco 'speclj'.
Lo siguiente es la función 'describir'. Se utiliza para proporcionar una descripción del caso de prueba que se está creando.
La siguiente función es la función 'it', que es el caso de prueba real. En el primer caso de prueba, la cadena "es verdadero" es el nombre que se le da al caso de prueba.
Debería y no debería conocerse como assertions. Todas las afirmaciones comienzan con should. Debería y no debería son solo dos de las muchas afirmaciones disponibles. Ambos toman expresiones que verificarán la veracidad y falsedad respectivamente.
Si ejecuta el caso de prueba, obtendrá el siguiente resultado. La salida muestra el tiempo en milisegundos para que se ejecute el caso de prueba.
←[32m.←[0m←[32m.←[0m
Finished in 0.00014 seconds
Prueba de aplicaciones basadas en web
Seleniumes uno de los marcos clave utilizados para probar aplicaciones modernas basadas en web. Las bibliotecas de Clojure también están disponibles y pueden usarse para probar aplicaciones basadas en web.
Veamos cómo podemos usar las bibliotecas de Selenium para probar aplicaciones basadas en web de Clojure.
Step 1- El primer paso es asegurarnos de que estamos utilizando el marco Ring and Compojure para crear una aplicación basada en web, que debe probarse. Usemos uno de los ejemplos de nuestros capítulos anteriores. El siguiente código es una aplicación web simple, que muestra "Hello World" en el 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 - A continuación, asegúrese de descargar el archivo jar de selenio https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 e inclúyalo en su classpath.
Step 3 - Asegúrese también de descargar el controlador web 'clj', que se utilizará para ejecutar la prueba web desde la siguiente ubicación.
https://clojars.org/clj-webdriver/versions/0.7.1
Step 4 - En el directorio de su proyecto, cree otro directorio llamado features y cree un archivo llamado 'config.clj'.
Step 5 - A continuación, agregue el siguiente código al archivo 'config.clj' creado en el paso 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 "/"))
El código anterior básicamente le dice al marco de prueba web que pruebe la aplicación, que se carga en la URL http://localhost:3000
Step 6 - Finalmente, escribamos nuestro código para realizar nuestra prueba.
(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)))
El código anterior llevará a cabo las siguientes acciones:
- Inicie el servidor de la aplicación.
- Abra la ruta raíz en el navegador.
- Compruebe si el mensaje "Hola mundo" está presente en la página.
- Cierre el navegador.
- Apague el servidor.