gpt4 book ai didi

typescript - 我如何使用 Typescript 模拟 Express Request、Response 和 NextFunction 对象

转载 作者:搜寻专家 更新时间:2023-10-30 20:36:05 24 4
gpt4 key购买 nike

这是我的中间件:

export const isLogged = () => (req: Request, res: Response, next: NextFunction) => next();

我正在尝试创建一个单元测试,但我无法使用正确的类型进行模拟:

const middleware = middlewares.isLogged()

middleware(
jest.fn<Request>(), // Expected 0-2 type argument but got 1
jest.fn<Response>(),
jest.fn<NextFunction>(),
);

这是行不通的,我已经尝试模拟 express 模块等,但还没有让它工作。我怎样才能 mock 他们?

最佳答案

前两个参数是 Request对象和一个 Response对象。

因为您的代码不使用 reqres您可以只将空对象作为模拟传递,并使用 as 告诉 TypeScript 将模拟视为预期类型。 :

it('should call next', () => {
const next = jest.fn();
middleware(
{} as Request,
{} as Response,
next,
);
expect(next).toHaveBeenCalled(); // SUCCESS
});

更新

如果您想在 Request 上模拟其他属性或 Response然后你可以简单地将它们添加到你的模拟对象中。

您的模拟对象(可能)不会实现完整的 RequestResponse界面,因此您可以使用类似 Partial<Request> 的东西或 Partial<Response> ,或者简单地告诉 TypeScript 你想要 "to opt-out of type-checking and let the values pass through compile-time checks"通过使用类型 any对于模拟对象:

it('should call next', () => {
const req: any = {
get: jest.fn((name) => {
if (name === 'content-type') return 'text/plain';
})
};
const res: any = {
send: jest.fn()
}
const next = jest.fn();
middleware(
req,
res,
next,
);
expect(next).toHaveBeenCalled(); // SUCCESS
});

关于typescript - 我如何使用 Typescript 模拟 Express Request、Response 和 NextFunction 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54961039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com