我正在使用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{ // 验证方法:_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
編寫的測試被認為是單元測試還是其他類型的測試?
使用單元測試,您可以獨立測試每個方法,例如,如果您的控制器方法呼叫並傳回服務的方法,則應在單元測試中測試控制器方法是否呼叫服務的方法。
整合測試更多是關於測試整個程式碼,通常不使用模擬對象,並嘗試測試應用程式的整個流程,使用真實的資料庫和其他內容。例如,您可以測試使用者故事,如登入和登出,註冊和建立個人資料等。
個人而言,在使用TDD時,我會先寫單元測試。如果我感覺需要,我之後會寫整合測試。