【问题标题】:Unit Testing the NestJS Routes are defined单元测试 NestJS 路由已定义
【发布时间】:2021-02-22 19:43:27
【问题描述】:

我发现this question 是关于确定路线的。虽然第一个答案正是我所需要的,而且它有效

import { Controller, Get, Request } from "@nestjs/common";
import { Request as ExpressRequest, Router } from "express";

@Get()
root(@Request() req: ExpressRequest) {
    const router = req.app._router as Router;
    return {
        routes: router.stack
            .map(layer => {
                if(layer.route) {
                    const path = layer.route?.path;
                    const method = layer.route?.stack[0].method;
                    return `${method.toUpperCase()} ${path}`
                }
            })
            .filter(item => item !== undefined)
    }
}

我希望能够对此进行单元测试。

我的端到端测试工作正常

    it('/api (GET) test expected routes', async done => {
        const ResponseData = await request(app.getHttpServer())
            .get('/api')
            .set('Accept', 'application/json');

        expect(ResponseData.status).toBe(200);
        expect(ResponseData.headers['content-type']).toContain('json');
        expect(ResponseData.body.routes.length).toBeGreaterThan(2);
        done();         // Call this to finish the test
    });

我遇到的问题是如何创建和传递用于单元测试的 root() 调用所需的请求部分。 ExpressRequest 不是简单地创建然后分配值的类或任何东西。它目前是一个很大的定义。我想一定有一种简单的方法可以创建一个,但我还没有找到它。

【问题讨论】:

    标签: testing routes jestjs nestjs


    【解决方案1】:

    您可以使用@golevelup/ts-jest 包来帮助创建对象的模拟。它可以将接口作为泛型并返回与该类型兼容的整个笑话模拟。

    【讨论】:

    • 这看起来很有希望,但我希望能够测试我在代码中定义的路由是否可用。例如,代码返回带有 HTTP 动词('GET /api'、'GET /healthz' 等)的端点。有了这个模拟,我会放松,除非我试图创建更深层次的结构来解析。我正在尝试测试的部分内容是,返回的这个结构不会改变,因为其他东西正在使用它,而且我知道 2 条基本路径(上面)将始终存在,因此我可以测试它们在格式正确。
    • 不知道为什么会有反对票,因为我没有这样做,也没有看到任何 cmets 表明它。您的模拟想法适用于创建要测试的对象。我只需要能够在没有模拟的情况下让它工作得更多,以测试它是否仍然有效。我会在投反对票时添加 cmets。
    • 人们会否决他们想要的。听起来您想做的不仅仅是对功能进行单元测试,这意味着模拟不太理想,尽管看起来您已经设置了适当的 e2e 测试。我链接的库非常适合轻松创建模拟和为模拟分配值,并且可以深入对象树以分配值,这就是为什么我认为它在这里很有用。
    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 2020-08-15
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2019-07-16
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多