mysql NestJS API(测试驱动开发)中的控制器和服务的相同测试

egdjgwm8  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(131)

我正在开发一个基于NestJS的API,使用Prisma和MySQL作为数据库。由于我是测试驱动开发(TDD)的新手,我想开始将测试纳入我的项目。我已经成功地为UsersService编写了测试,但我对如何测试相应的UsersController感到困惑。此外,我不确定单元测试和集成测试之间的区别。下面,我将提供我的UsersServiceUsersController以及到目前为止编写的测试的相关代码片段。
Prisma方案:

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")
}

字符串
用户服务(相关部分):

async create(createUserDto: CreateUserDto): Promise<User> {
  // Validation methods: _validateUsername, _validateEmail, etc.

  const createdUser = await this.prisma.user.create({
    data: {
      ...createUserDto,
      password: await this._hashPassword(createUserDto.password),
    },
  });

  // Returning selected user properties
  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编写的测试是否被视为单元测试或其他测试?
jvlzgdj9

jvlzgdj91#

使用单元测试,您可以独立地测试每个方法,例如,如果您的控制器方法正在调用并返回服务的方法,则应该在单元测试中测试您的控制器方法是否正在调用服务的方法。
集成测试更多的是测试整个代码,你通常不使用模拟,而是尝试测试应用程序的整个流程,你使用真实的数据库和一切。例如,您可以测试用户故事,如登录和注销,注册和创建配置文件等。
就我个人而言,我在使用TDD时首先编写单元测试。如果我觉得需要的话,我会在之后编写集成测试。

相关问题