如何在启动环形服务器之前运行测试



我正在开发一个 clojure API,我想每次启动服务器时,在它之前运行测试。

我已经找到了函数(运行测试(和(运行所有测试(,但 clojure 说这个函数在该命名空间中不存在。如果我把 (:use clojure.test( 放在我的 ns 上,该函数可以工作,但它从我正在使用的库和 clojure 核心运行测试。

这是我的处理程序,我放置了 main 方法,然后我希望"lein run"运行我的测试然后启动服务器。

(ns clojure-api.handler
(:use compojure.core)
(:require [compojure.route :as route]
[org.httpkit.server :refer [run-server]]))
(defroutes app-routes 
;routes...
)
(def app
(-> app-routes
;Some middleware))
(defn -main  
[& args]
(println "Running bank tests")
(run-all-tests)
(println "Starting server")
(run-server app {:port 3000}))

如果您的项目是莱宁根项目,则可以在project.clj中定义一个别名,该别名将测试和运行任务组合在一起,如下所示:

:aliases {"test-and-run" ["do" "test" "run"]}
;; .lein.sh test-and-run

您可以指定通过(run-tests 'ns-one-test 'ns-two-test)运行测试的命名空间。

(defn -main  
[& args]
(println "Running bank tests")
(run-tests 'ns-one-test 'ns-two-test)
(println "Starting server")
(run-server app {:port 3000}))

这将起作用,并且仅在指定的命名空间中运行测试。

正如注释所述,测试通常在部署之前在设置中运行(例如使用 Jenkins、GitLab 或 CircleCI(。当测试失败时,不会执行下一步,会在某处显示报告,并且不会部署代码。

最新更新