使用測試驅動開發,在NestJS API中,控制器和服務共用相同的測試
P粉354602955
P粉354602955 2023-09-16 08:44:31
0
1
509

我正在使用Prisma和MySQL開發基於NestJS的API。由於我對測試驅動開發(TDD)還不熟悉,我想開始在我的專案中加入測試。我已經成功地為UsersService編寫了測試,但我對如何測試相應的UsersController感到困惑。此外,我對單元測試和整合測試之間的差異也不確定。下面,我將提供我已經寫的UsersServiceUsersController和測試的相關程式碼片段。

棱鏡方案:

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編寫的測試被認為是單元測試還是其他類型的測試?

P粉354602955
P粉354602955

全部回覆(1)
P粉052686710

使用單元測試,您可以獨立測試每個方法,例如,如果您的控制器方法呼叫並傳回服務的方法,則應在單元測試中測試控制器方法是否呼叫服務的方法。

整合測試更多是關於測試整個程式碼,通常不使用模擬對象,並嘗試測試應用程式的整個流程,使用真實的資料庫和其他內容。例如,您可以測試使用者故事,如登入和登出,註冊和建立個人資料等。

個人而言,在使用TDD時,我會先寫單元測試。如果我感覺需要,我之後會寫整合測試。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板