用芯测试clojure的发光渲染

  • 本文关键字:测试 clojure clojure
  • 更新时间 :
  • 英文 :


这段代码来自默认的luminus模板:

(deftype RenderableTemplate [template params]
  Renderable
  (render
    [this request]
    (content-type
      (->>
        (assoc
          params
          (keyword (s/replace template #".html" "-selected"))
          "active"
          :servlet-context
          (:context request)
          :user-id
          (session/get :user-id)
          :user
          (session/get :user))
        (parser/render-file (str template-path template))
        response)
      "text/html; charset=utf-8")))
(defn render [template & [params]]
  (RenderableTemplate. template params))

我需要使用clojure.test:

测试这个函数
(defn home-page [& [user]]
  (layout/render
    "home.html"
   {:user user}))

如何使用与键:user相关联的值测试上述函数?

我建议您在提出这些一般性问题之前阅读一些文档并做出合理的努力。这可以是一个开始http://blog.jayfields.com/2010/08/clojuretest-introduction.html

在您对clojure测试感到满意之后,您可能会想转到https://github.com/marick/Midje/wiki/A-tutorial-introduction-for-Clojure.test-users

享受:)

首先像这样设置路由和处理程序:

(defn home-page [& [user]]
  (layout/render
    "home.html"
   {:user user}))

; setting routes
(defroutes main-routes
  (GET "/user/:user" [user] (home-page user)))

然后做单元测试:

基本单元测试
(deftest home-page-test
  ; Check if response code is 200
  (is (= 200 (:status (main-routes {:request-method :get :uri "/user/Michael"})))))

或者也可以使用Midje

使用Midje

(:use midje.sweet
      clojure.test)
(fact "Homepage Test"
  (:status (main-routes {:request-method :get :uri "/user/Michael")) => 200) 

我也面临同样的问题。直接调用(home-page)将返回一个RenderableTemplate类型,这对于测试是没有用的。

在你的测试中要求:

(:require [capacityplanning.layout :as layout]
             [selmer.parser :as parser])

添加以下功能:

(def template-path "templates/")
(defn mockRender [template params]
  (parser/render-file (str template-path template) params))

在测试中你可以绑定:

(with-redefs [layout/render mockRender]
          (home-page user))

现在,当home-page被调用时,它将返回html作为字符串。

对于编写单元测试应该更有用。

最新更新