使用蠓进行Clojure测试



我的函数接受一个地图参数,我从中获取存款价值。目前,我可以测试诸如存款值是否为空或存款价值是否大于某个值等场景。我的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"}))))

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

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

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

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

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

最新更新