Учебники

Clojure — автоматическое тестирование

В этой главе давайте обсудим варианты автоматического тестирования, предоставляемые Clojure.

Тестирование для клиентских приложений

Чтобы использовать тестирование для среды Clojure, вы должны использовать зависимости, расположенные по адресу https://github.com/slagyr/speclj#manual-installation.

Этот URL-адрес предоставляет платформу speclj , которая используется в качестве тестовой среды, управляемой данными или поведением, для платформы 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’, которая является реальным тестовым примером. В первом тестовом примере строка «истина» — это имя, данное тестовому примеру.

  • Должны и не должны называться утверждениями . Все утверждения должны начинаться с Должны и не должны быть только два из многих доступных утверждений. Они оба принимают выражения, которые они будут проверять на правдивость и ложность соответственно.

Сначала мы должны убедиться, что используется оператор require для включения всех базовых библиотек в инфраструктуру speclj.

Далее идет функция «описать». Это используется для предоставления описания создаваемого тестового примера.

Следующая функция — это функция ‘it’, которая является реальным тестовым примером. В первом тестовом примере строка «истина» — это имя, данное тестовому примеру.

Должны и не должны называться утверждениями . Все утверждения должны начинаться с Должны и не должны быть только два из многих доступных утверждений. Они оба принимают выражения, которые они будут проверять на правдивость и ложность соответственно.

Если вы запустите тестовый пример, вы получите следующий вывод. Выходные данные показывают время, необходимое в миллисекундах для запуска тестового примера.

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

Тестирование для веб-приложений

Selenium является одной из ключевых сред, используемых для тестирования современных веб-приложений. Также доступны библиотеки Clojure, которые можно использовать для тестирования веб-приложений.

Давайте посмотрим, как мы можем использовать библиотеки Selenium для тестирования веб-приложений Clojure.

Шаг 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))

Шаг 2 — Затем обязательно загрузите файл jar селена https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 и включите его в путь к классам.

Шаг 3 — Также убедитесь, что вы скачали веб-драйвер ‘clj’, который будет использоваться для запуска веб-теста, из следующей папки.

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

Шаг 4 — Создайте в каталоге вашего проекта еще один каталог с функциями и создайте файл с именем «config.clj».

Шаг 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

Шаг 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)))

Приведенный выше код собирается предпринять следующие действия —