【问题标题】:How to do integration testing for clojure/ring/selenium/leiningen?如何对 clojure/ring/selenium/leiningen 进行集成测试?
【发布时间】:2014-08-20 06:51:27
【问题描述】:

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

我正在考虑类似的用法:

$ lein with-ring 测试

目前我有两个想法:

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

  2. 编写一个 Makefile 规则来启动 ring,运行 lein test,find &kill the ring 进程 - 太复杂/hacky

有没有更简单的方法?

【问题讨论】:

    标签: clojure webdriver continuous-integration leiningen


    【解决方案1】:

    如果您使用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))))))
    

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

    【讨论】:

    • 我刚刚对其进行了测试,效果很好,但我有一个小评论:您必须使用 :join 调用 run-jetty?像这样的错误: {:port 1234 :join? false} 否则它会阻塞。
    • @vidi:谢谢!我添加了答案的关键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2012-09-23
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多