【发布时间】:2015-10-06 12:33:42
【问题描述】:
我不知道如何称呼这可能是“对 koa 路由器的静态调用”?如果您从技术上谈论它,这似乎是我真正想要实现的目标的正确措辞吗?
无论如何,我正在使用koa-router 并且正在编写单元测试(不是集成测试)。所以我不想在我的 koa 应用程序上调用 .listen() ,因为这个原因......它会创建一个 http 服务器,现在让我的测试成为集成测试。
在我的测试中,我只是想直接调用应用程序对象实例并调用路由,并且能够不返回任何结果并检查我是否在响应中没有返回任何结果。
你怎么能做到这一点?我找不到示例,我已经尝试了各种伪代码尝试对 koa 应用程序对象。
【问题讨论】:
-
针对应用程序本身的测试是一项集成测试。您是要测试应用本身(集成)还是单独的中间件(单元测试)?
-
没有。我正在测试我的 API 的接口(合同)。我正在通过 Koa 公开 RESTful 端点。这意味着我对那些端点进行 TDD,因此我的 TDD 是非集成的。它们是单元测试,不应该在 app.Listen() 上进行测试。我只是在测试实际的代码,即 SUT,不,我不是在测试 Koa 的框架。您使用框架,但您测试域逻辑或其他任何东西。我的域逻辑包括路由。因为如果开发人员破坏了路线,他们只是破坏了 BDD 测试并破坏了业务需求。这就是我开发代码的方式。
-
您在这里混淆了术语。如果您正在测试您的路由,即测试
GET /,那么您必须将应用程序的该部分作为一个整体进行测试——这使其成为一个集成测试。如果您正在测试单个功能(您不是),那么您就是在进行单元测试。您不想测试将您的应用程序与 koa 连接的层(顺便说一句,它应该非常薄),您只想集成测试那一点。 -
“创建并返回一个 HTTP 服务器”——直接来自 koa 文档。对于 app.listen()。
-
我没有测试所有单独的功能,TDD'ers 发现你可以过度测试这条路线。使用单元测试和集成测试来测试边界,并从边界(例如,您的单元......其中一个单元可能是服务合同)进行测试驱动,这会推动您对代码进行 TDD。时代变了,人们不再使用传统的 TDD,您为每个功能创建大量测试。测试过于耦合,最终会导致测试失败,您只需要测试边界单元和代码单元。