0

我的函数接受一个 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"}))))
4

1 回答 1

0

好吧,对于初学者来说,您应该先编写测试 :-)。

但是由于代码已经存在,我会告诉你我通常是如何工作的:

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

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

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

于 2017-07-14T14:51:16.543 回答