首页 > 解决方案 > 如何对一系列快速中间件进行单元测试?

问题描述

我有一个控制器类,它导出一个包含许多中间件(使用express-validator)的数组,这些中间件验证请求的所有重要部分是否存在,并且作为数组的最后一个元素是请求的处理程序:

控制器类:

import { body, ValidationChain } from "express-validator/check";
import { Request, Response, Handler } from "express";

export default class UserController {
    signupChainPost: Handler[];

    constructor() {

        this.signupChainPost = [
            this.getEmailExistsMiddleware("email"),
            this.getPasswordValidationMiddleware("password"),
            this.signupHandlerPost.bind(this)
        ];
    }

    private getEmailExistsMiddleware(fieldName: string): ValidationChain {
        return body(fieldName, "some error").isEmail().custom((value, { req }) => {
            // ...
        });
    }

    private getPasswordValidationMiddleware(fieldName: string): ValidationChain {
        return body(fieldName, "some error").isLength({ min: 5 });
    }

    private async signupHandlerPost(req: Request, res: Response) {
        // request handling
    }
}

使用 Epxress.js 在主服务器文件中使用控制器类:

const userController = new UserController();
app.post("/user/create", userController.signupChainPost);

现在我想为我的请求处理程序编写单元测试,但我不知道如何测试一组中间件/处理程序。我是否应该只测试“真正的处理程序”并信任中间件以防止无效请求到达我的处理程序?还是我的应用程序设计根本错误导致单元测试难以编写?

在此先感谢您的帮助 :)

标签: node.jstypescriptunit-testingexpress

解决方案


推荐阅读