Nestjs 单元测试期间可选的 DTO

发布于 2025-01-11 14:20:12 字数 1325 浏览 0 评论 0原文

我有一个简单的控制器:

@Patch('/:userId')
  public async updateUser(    
    @Param('userId') userId: string,
    @Body() userUpdate: UpdateUserDto): Promise<any> {  
    await this.usersService.update(userId, userUpdate);
}

UpdateUserDto 是:

import { IsEmail,IsString, IsOptional, MaxLength, IsNotEmpty} from "class-validator";

export class UpdateUserDto{
    
    @IsEmail()
    @IsOptional()
    email:string;
     
    @IsString()
    @IsOptional()
    password:string;

    @IsString()
    @MaxLength(30)
    @IsNotEmpty()
    @IsOptional()
    name: string;
  
    @IsString()
    @MaxLength(40)
    @IsNotEmpty()
    @IsOptional()
    username: string;    
}

所有字段都是可选的以创建部分更新。

如果我使用所有字段,我的单元测试中不会出现任何错误

it('test', async () => {
    const users = await controller.updateUser('10',{name: "testname",username:"fakeUser",email:"email",password:"S"});
  });

,但如果我使用部分字段,则会出现错误,例如:

it('test', async () => {
    const users = await controller.updateUser('10',{name: "testname",email:"email",password:"S"});

类型参数 '{ name: string;电子邮件:字符串;密码:字符串; }' 不可分配给“UpdateUserDto”类型的参数。 类型“{ name: string;”中缺少属性“用户名”;电子邮件:字符串;密码:字符串; }',但在“UpdateUserDto”类型中是必需的。 });

I have a simple controller:

@Patch('/:userId')
  public async updateUser(    
    @Param('userId') userId: string,
    @Body() userUpdate: UpdateUserDto): Promise<any> {  
    await this.usersService.update(userId, userUpdate);
}

The UpdateUserDto is:

import { IsEmail,IsString, IsOptional, MaxLength, IsNotEmpty} from "class-validator";

export class UpdateUserDto{
    
    @IsEmail()
    @IsOptional()
    email:string;
     
    @IsString()
    @IsOptional()
    password:string;

    @IsString()
    @MaxLength(30)
    @IsNotEmpty()
    @IsOptional()
    name: string;
  
    @IsString()
    @MaxLength(40)
    @IsNotEmpty()
    @IsOptional()
    username: string;    
}

all fields are optional to create partial updates.

I don't have any error in my unit test if I use all fields

it('test', async () => {
    const users = await controller.updateUser('10',{name: "testname",username:"fakeUser",email:"email",password:"S"});
  });

but I get an error if I use part of it, like:

it('test', async () => {
    const users = await controller.updateUser('10',{name: "testname",email:"email",password:"S"});

Argument of type '{ name: string; email: string; password: string; }'
is not assignable to parameter of type 'UpdateUserDto'.
Property 'username' is missing in type '{ name: string; email: string; password: string; }' but required in type 'UpdateUserDto'.
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏末的微笑 2025-01-18 14:20:12

如果 password 是可选的(即可以是未定义),则告诉 TS 它是:password?: string

if password is optional (ie., can be undefined), then tell to TS it is: password?: string

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文