Nestjs 单元测试期间可选的 DTO
我有一个简单的控制器:
@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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果
password
是可选的(即可以是未定义
),则告诉 TS 它是:password?: string
if
password
is optional (ie., can beundefined
), then tell to TS it is:password?: string