Clojure - Автоматическое тестирование
В этой главе давайте обсудим варианты автоматического тестирования, предоставляемые Clojure.
Тестирование клиентских приложений
Чтобы использовать тестирование для Clojure framework, вы должны использовать зависимости, расположенные в https://github.com/slagyr/speclj#manual-installation
Этот URL-адрес предоставляет specljframework, который используется в качестве тестовой среды, управляемой тестовыми данными или поведением, для Clojure. Вы должны убедиться, что используете платформу Clojure 1.7.0 при использовании любой из библиотек speclj. По умолчанию тестовые файлы будут отличаться от файлов кода Clojure и должны быть помещены в каталог spec.
Ниже приведен пример кода тестового файла.
(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)
В отношении приведенного выше кода необходимо отметить следующее:
Во-первых, мы должны убедиться, что с помощью инструкции 'require' все основные библиотеки включены в структуру 'speclj'.
Далее идет функция «описать». Он используется для предоставления описания создаваемого тестового примера.
Следующая функция - это функция «it», которая и является фактическим тестовым примером. В первом тестовом примере строка «верно» - это имя, данное тесту.
Следует и не следует - известны как assertions. Все утверждения начинаются с следует. Следует и не следует - это лишь два из множества доступных утверждений. Они оба принимают выражения, которые проверят на истинность и ложность соответственно.
Если вы запустите тестовый пример, вы получите следующий результат. В выходных данных показано время, затраченное в миллисекундах на выполнение тестового примера.
←[32m.←[0m←[32m.←[0m
Finished in 0.00014 seconds
Тестирование веб-приложений
Seleniumявляется одной из ключевых сред, используемых для тестирования современных веб-приложений. Также доступны библиотеки Clojure, которые можно использовать для тестирования веб-приложений.
Давайте посмотрим, как мы можем использовать библиотеки Selenium для тестирования веб-приложений Clojure.
Step 1- Первый шаг - убедиться, что мы используем среду Ring и Compojure для создания веб-приложения, которое необходимо протестировать. Давайте воспользуемся одним из примеров из наших предыдущих глав. Следующий код представляет собой простое веб-приложение, которое отображает в браузере «Hello World».
(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 - Затем обязательно загрузите файл selenium jar. https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 и включите его в свой путь к классам.
Step 3 - Также убедитесь, что вы загрузили веб-драйвер clj, который будет использоваться для запуска веб-теста из следующего места.
https://clojars.org/clj-webdriver/versions/0.7.1
Step 4 - В каталоге вашего проекта создайте еще один каталог с именем features и создайте файл с именем config.clj.
Step 5 - Затем добавьте следующий код в файл config.clj, созданный на предыдущем шаге.
ns clj-webdriver-tutorial.features.config)
(def test-port 3000)
(def test-host "localhost")
(def test-base-url (str "http://" test-host ":" test-port "/"))
Приведенный выше код в основном сообщает платформе веб-тестирования о необходимости тестирования приложения, которое загружается по URL-адресу http://localhost:3000
Step 6 - Наконец, давайте напишем наш код для проведения нашего теста.
(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)))
Приведенный выше код будет выполнять следующие действия:
- Запустите сервер для приложения.
- Откройте корневой путь в браузере.
- Проверьте, присутствует ли на странице сообщение «Hello World».
- Закройте браузер.
- Выключите сервер.