gpt4 book ai didi

jestjs - 如何测试验证管道在 NestJS 上抛出形状不正确的请求的预期错误

转载 作者:行者123 更新时间:2023-12-05 01:13:12 25 4
gpt4 key购买 nike

我使用的是 NestJS 7.0.2,并通过 app.useGlobalPipes(new ValidationPipe()); 全局启用了验证管道。

我希望能够进行单元测试,以验证如果提供了形状不正确的对象是否会引发错误,但是编写的测试仍然通过。我已经看到一种解决方案是在 e2e via this post 中进行此测试,但我想知道我是否缺少任何可以让我在单元测试中执行此操作的内容。

我有一个非常简单的 Controller 和一个非常简单的 DTO。

Controller

async myApi(@Body() myInput: myDto): Promise<myDto | any> {
return {};
}

DTO

export class myDto {
@IsNotEmpty()
a: string;

@IsNotEmpty()
b: string | Array<string>
}

规范文件

  describe('generate', () => {
it('should require the proper type', async () => {
const result = await controller.generate(<myDto>{});
// TODO: I expect a validation error to occur here so I can test against it.
expect(result).toEqual({})
})
})

如果我不强制 myDto 的类型并且只对通用对象执行 ts-ignore ,它也会失败。

最佳答案

只需使用 ValidationPipe 测试您的 DTO:

it('validate DTO', async() => {
let target: ValidationPipe = new ValidationPipe({ transform: true, whitelist: true });
const metadata: ArgumentMetadata = {
type: 'body',
metatype: myDto,
data: ''
};
await target.transform(<myDto>{}, metadata)
.catch(err => {
expect(err.getResponse().message).toEqual(["your validation error"])
})
});

你可以找到here Nestjs 代码库中 ValidationPipe 的完整测试示例

关于jestjs - 如何测试验证管道在 NestJS 上抛出形状不正确的请求的预期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60819612/

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