使用midge进行clojure测试

时间:2017-07-14 10:48:54

标签: clojure midje

我的函数接受一个map参数,在其中我从中获取存款值。目前,我能够测试存款值是否为空或存款值是否大于某个值等情况等。我的API跟踪用户进行存款的次数并使用原子跟踪此情况用户已经存款超过4次,他/她应该收到一定的错误信息。如何使用midje测试此场景?

以下是我的示例测试用例:

(facts "Mytesting"
       (fact "Invalid Amount"
             (let [response (httpserver/app (mock/request
                                              :post "/deposit"
                                              {:deposit "9"}))] ;
               (:status response) => 422
               (:headers response) => {"Content-Type" "application/json; charset=utf-8", "X-Content-Type-Options" "nosniff", "X-Frame-Options" "SAMEORIGIN", "X-XSS-Protection" "1; mode=block"}
               (:body response) => (json/write-str {:status-code -2 :status-msg "Invalid Amount"}))))

1 个答案:

答案 0 :(得分:0)

嗯,对于初学者,你应该先写下你的测试: - )。

但由于代码已经存在,我将告诉你我的工作方式:

  • 我在测试HTTP路由之间拆分了测试(就像你在这里做的那样)。在这里,我使用Midje提供的provided功能来验证是否正确调用了支持功能。
  • 其他测试直接调用支持函数,传入类似于Ring请求(或Yada上下文或您使用的任何内容)的映射。在这里,您还可以使用provided模拟任何其他与之无关的功能。
  • 支持功能通常委托给实际的"业务"不了解http请求的函数,但只接受并返回业务实体(通常只是Clojure中的映射和向量)。

您当然也可以添加端到端测试来验证整个代码堆栈的行为,但这可能涉及设置数据库等......

要了解有关如何测试特定代码的更多信息,我需要了解有关内部工作原理的更多信息。