我正在使用Prisma和MySQL开发基于NestJS的API。由于我对测试驱动开发(TDD)还不熟悉,我想开始在我的项目中加入测试。我已经成功为UsersService编写了测试,但我对如何测试相应的UsersController感到困惑。此外,我对单元测试和集成测试之间的区别也不确定。下面,我将提供我已经编写的UsersService、UsersController和测试的相关代码片段。
棱镜方案:
enum Role {
ADMIN
AMBASSADOR
USER
}
model User {
id String @id @default(uuid())
email String @unique
username String @unique
firstname String
lastname String
password String
role Role @default(USER)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("users")
}
UsersService(相关部分):
async create(createUserDto: CreateUserDto): Promise<User> {
// 验证方法:_validateUsername, _validateEmail, 等等。
const createdUser = await this.prisma.user.create({
data: {
...createUserDto,
password: await this._hashPassword(createUserDto.password),
},
});
// 返回选定的用户属性
return {
id: createdUser.id,
username: createdUser.username,
email: createdUser.email,
firstname: createdUser.firstname,
lastname: createdUser.lastname,
role: createdUser.role,
createdAt: createdUser.createdAt,
updatedAt: createdUser.updatedAt,
};
}
UsersController(相关部分):
@Post()
@HttpCode(HttpStatus.CREATED)
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
具体问题:
UsersController,有哪些推荐的编写测试的方法?它们与为UsersService编写的测试有何不同?UsersService编写的测试被认为是单元测试还是其他类型的测试?Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
使用单元测试,您可以独立测试每个方法,例如,如果您的控制器方法调用并返回服务的方法,则应在单元测试中测试控制器方法是否调用服务的方法。
集成测试更多地是关于测试整个代码,通常不使用模拟对象,并尝试测试应用程序的整个流程,使用真实的数据库和其他内容。例如,您可以测试用户故事,如登录和注销,注册和创建个人资料等。
个人而言,在使用TDD时,我首先编写单元测试。如果我感觉需要,我之后会编写集成测试。