定义了NestJS路由的单元测试



我发现了这个关于确定路线的问题。虽然第一个答案正是我所需要的,而且它在中有效

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((调用所需的Request部分。ExpressRequest不是一个类或任何可以简单创建然后赋值的东西。目前这是一个很大的定义。我想一定有一种简单的方法可以创建一个,但我还没有找到。

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

最新更新