如何对一系列快速中间件进行单元测试?

时间:2018-12-15 19:58:41

标签: node.js typescript unit-testing express

我有一个控制器类,该类导出包含多个中间件(利用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);

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

提前感谢您的帮助:)

0 个答案:

没有答案