首页 > 解决方案 > 通过将路由器逻辑分离到自己的控制器中来对路由器逻辑进行单元测试

问题描述

我有一个这样的路由处理程序:app.use('/authorization', authorization);它的路由器处理程序定义为

router.get('/', (req, res, next) {
    handleResponse(err, response, data) {
        // ...
    }

    sessionService.getSession(req, res, req,query.code, handleResponse);
});

我正在努力寻找一种对此进行单元测试的方法,作为我的第一个解决方案,我考虑将所有业务逻辑删除到一个单独的控制器中,以便可以独立于路由器对其进行测试。

这是我的控制器的示例实现:

module.exports = class AuthorizationController {
    constructor(req, res, next) {
        this.req = req;
        this.res = res;
        this.next = next;
    }

    handleResponse(err, response, data) {
        // do things with this.req, this.res and this.next
    }
};

在我的路由器上,我一直这样称呼它:

router.get('/', (req, res, next) {
    sessionService.getSession(req, res, req,query.code, (new AuthorizationController(req, res, next)).handleResponse);
});

控制器已成功初始化(在其构造期间),但方法this内部的引用一旦被调用。handleResponseundefined

这是将我的方法与路由器分开的正确方法吗?如果是这样,有没有办法初始化req, res and next我的控制器的属性,以便它们在类的生命周期内持续存在?

this未定义大概是因为创建类的位置与handleResponse调用方法的位置。

标签: node.jsexpress

解决方案


推荐阅读