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

我正在使用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 { // 验证方法:_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時,我會先寫單元測試。如果我感覺需要,我之後會寫整合測試。

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!