如何对clojure/ring/selenium/leiningen进行集成测试?

vid*_*idi 1 continuous-integration webdriver clojure leiningen

我有一个 clojure/ring web 应用程序,我想用 clj-webdriver 测试它。有没有一种简单的方法来运行环网络服务器,然后运行测试,以便它们以环实例为目标?

我正在考虑一种用法,例如:

$ lein 带环测试

到目前为止,我有两个想法:

  1. 编写一个自定义的高阶 leiningen 插件。好像太复杂了。是否已经存在类似的插件?

  2. 编写一个 Makefile 规则来启动环,运行 lein 测试,找到并终止环进程 - 太复杂/hacky

有没有更简单的方法?

xsc*_*xsc 5

如果您正在使用,clojure.test您可以use-fixtures在测试中调用以启动/停止您的服务器,例如:

(use-fixtures
  :once
  (fn [f]
    (let [server (ring.adapter.jetty/run-jetty
                    #'your-app
                    {:port 1234 :join? false})]
      (try
        (f)
        (finally
          (.stop server))))))
Run Code Online (Sandbox Code Playgroud)

只需将启动/停止逻辑调整为您首选的网络服务器(本例中的码头;http-kit 将非常相似)。如果您替换为:once:each您甚至会为每个单独的测试提供一个新的服务器实例。