首页 > 解决方案 > 如何对控制器的快速路由器调用进行单元测试

问题描述

我只是想测试一旦请求获取路由,就会调用 userController。我在 StackOverflow 上看到了其他几个问题,其中接受的答案是使用 supertest,但解决方案通常感觉更像是集成测试而不是单元测试。

我是否在考虑这个错误,并且在我编写集成测试时,Express 路由是否应该不进行单元测试而只进行测试?

任何帮助,将不胜感激。

控制器.js

const userController = {

    get: (req, res, next) => {
        return res.status(200).json('hiding get request from controller')
    }
}

export default userController

路由.js

import express from 'express';
import userController from '../controllers/users';
const userRouter = express.Router();


userRouter.get('/', userController.get)


export default userRouter;

标签: javascriptnode.jsunit-testingexpress

解决方案


如果您阅读了supertest 文档
,它指出:Super-agentdriven library for testing node.js HTTP servers using a fluent API。
因此,您可以将它用于 ubit 测试和集成测试。这甚至在学术层面上也是一个有争议的讨论。作为一个想法:

单元测试是一种测试方法,通过该方法测试各个源代码单元以确定它们是否可以使用,而集成测试则检查软件模块之间的集成。

问题就从这里开始了。
例如,一个由不同模块(财务、销售、CRM 等)组成的 ERP 系统,
如果您从高层次上看,这些都是模块,并且在系统架构师看来,集成测试是例如财务和 CRM 模块之间的。
查看财务模块,这些模块是分类帐和成本会计-该级别的集成测试在这些模块之间。因此,查看分类帐您有一个预订和一个报告模块,所以......

我们可以假设大多数程序员/开发人员通常接受的唯一事情是单个简单的报告是一个单元,但其余的纯粹是定义和约定 - 无论是组织制定的公认标准或定义的级别。
不管你怎么称呼它,或者你觉得唯一可以确定的是在交付之前测试你的应用程序。

因此,唯一给出“正确”答案的人是您(以及您的团队,如果有的话)


推荐阅读