Menggunakan pembangunan dipacu ujian, dalam NestJS API, pengawal dan perkhidmatan berkongsi ujian yang sama
P粉354602955
P粉354602955 2023-09-16 08:44:31
0
1
529

Saya sedang membangunkan API berasaskan NestJS menggunakan Prisma dan MySQL. Memandangkan saya baru dalam pembangunan dipacu ujian (TDD), saya ingin mula menambahkan ujian pada projek saya. Saya telah berjaya untuk UsersService编写了测试,但我对如何测试相应的UsersController感到困惑。此外,我对单元测试和集成测试之间的区别也不确定。下面,我将提供我已经编写的UsersServiceUsersController dan menguji coretan kod yang berkaitan.

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

Perkhidmatan Pengguna (bahagian yang berkaitan):

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,
  };
}

Pengawal Pengguna (bahagian yang berkaitan):

@Post()
@HttpCode(HttpStatus.CREATED)
create(@Body() createUserDto: CreateUserDto) {
  return this.usersService.create(createUserDto);
}

Soalan khusus:

  • Bagaimana ia berbeza untuk ujian yang ditulis UsersController,有哪些推荐的编写测试的方法?它们与为UsersService?
  • Apakah perbezaan antara ujian unit dan ujian integrasi? Adakah ujian yang saya tulis untuk UsersService dianggap sebagai ujian unit atau beberapa jenis ujian lain?

P粉354602955
P粉354602955

membalas semua(1)
P粉052686710

Menggunakan ujian unit, anda boleh menguji setiap kaedah secara bebas, contohnya, jika kaedah pengawal anda memanggil dan mengembalikan kaedah perkhidmatan, anda harus menguji dalam ujian unit sama ada kaedah pengawal memanggil kaedah perkhidmatan.

Ujian integrasi lebih kepada menguji keseluruhan kod, biasanya tidak menggunakan objek olok-olok, dan cuba menguji keseluruhan aliran aplikasi, menggunakan pangkalan data sebenar dan perkara lain. Contohnya, anda boleh menguji cerita pengguna seperti log masuk dan log keluar, pendaftaran dan pembuatan profil, dsb.

Secara peribadi, apabila menggunakan TDD, saya menulis ujian unit dahulu. Saya akan menulis ujian integrasi kemudian jika saya rasa perlu.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan