Khóa học NestJS - Bài 06 Hướng dẫn viết Unit Test

Khóa học NestJS - Bài 06 Hướng dẫn viết Unit Test

Post Date : 2023-07-06T21:52:16+07:00

Modified Date : 2023-07-06T21:52:16+07:00

Category: nestjs-tutorial

Tags: nestjs , nestjs-pet-website

Bài 06

  1. Giới thiệu sơ qua về Unit Test
  2. Cách test một service trong NestJS
  3. Hướng dẫn debug unit test trong NestJS
  4. Ứng dụng viết Unit Test cho PetCategory

Đầu tiên, các anh/chị có thể thấy rằng sẽ có một mối quan hệ mật thiết giữa 3 thứ trong ngành này: errors/bugs(lỗi), stress(căng thẳng), tests(kiểm tra)

image

  1. Càng nhiều lỗi (errors/bugs) thì càng căng thẳng(stress)
  2. Càng căng thẳng(stress) thì càng tạo ra nhiều lỗi(errors/bugs)
  3. Càng kiểm tra nhiều(test) thì càng ít lỗi(errors/bugs) do đã phát hiện và được sửa
  4. Càng ít lỗi(errors/bugs) thì càng ít cằng thẳng(stress)

Do đó, việc test nhiều/kĩ sẽ đảm bảo được các anh/chị sẽ ít căng thẳng(stress) hơn.

Tiếp theo tôi xin giới thiệu với các anh/chị nghệ thuật viết test như thế nào cho đúng. Trước tiên, tôi xin phép đi qua một khái niệm tổng quát về testing trong ngành phần mềm.

Kim tự tháp kiểm thử phần mềm

image

Bao gồm tất cả các giai đoạn của vòng đời phát triển phần mềm (SDLC). Nó bắt đầu từ unit testing, đến kiểm thử tích hợp (integration testing) và kết thúc với kiểm thử chức năng ở đỉnh(e2e)

Không có sự phân bổ cố định giữa các loại kiểm thử này. Thay vào đó, bạn nên xác định những bài kiểm thử nào phù hợp nhất với nhu cầu của bạn dựa vào việc cân đối chi phí, thời gian thực hiện và tài nguyên cho từng loại kiểm thử.

Các nhà phát triển phần mềm Agile cũng sử dụng phương pháp góc phần tư kiểm thử phần mềm ( Software Testing Quadrants) để phân loại các kiểm thử theo nghiệp vụ(business-facing) hay technology facing(công nghệ) nhằm tìm ra những bất cập của sản phẩm(critique product) và hỗ trợ đội ngũ phát triển xây dựng và thay đổi ứng dụng 1 cách tự tin.

image

Vậy là chúng ta đã đi qua tổng quan về một số khái niệm cũng như phương pháp kiểm thử phần mềm. Trong phạm vi bài viết này, tôi sẽ tập trung trình bày vào 2 phần chính:

  • Unit Tests

Vậy viết Unit Test cụ thể là làm gì

Các anh/chị cố gắng ghi nhớ định nghĩa đơn giản sau đây, để phân tích và áp dụng được unit test vào trong dự án mà không tốn quá nhiều thời gian/tài nguyên.

Unit test được áp dụng để kiểm tra logic của một đoạn code thuộc 1 phần mềm. Đôi khi trong một hệ thống, cũng có thể tình một module là 1 unit.

Công cụ hỗ trợ viết Unit Test

Các anh/chị có 2 lựa chọn khi viết Unit Test:

  • Tự xây dựng 1 framework hỗ trợ viết Unit Test
  • Sử dụng 1 framework Unit Test có sẵn trong hệ sinh thái

Framework được xây dựng/lựa chọn cần phải đáp ứng các tiêu chí sau:

  • Dễ setup và well document
  • Hỗ trợ tạo test suite, gom nhóm các test case
  • Hỗ trợ các util cho việc kiểm tra kết quả
  • Hỗ trợ Mock/Stub
  • Hỗ trợ Async
  • Hỗ trợ report

Các framework Unit Test hiện tại trong hệ sinh thái NodeJS được gom thành 2 trường phái:

NodeJS Testing Frameworks

  1. JestJS : support jsdom, BDD style ( support typescript )
  2. Jasmine: BDD style
  3. Mocha(Testing Framework) & Chai(Assertion Libs): TDD style

Trong phạm vi của bài viết này, tôi sẽ chia sẻ với các anh/chị về một số cú pháp/khái niệm khi sử dụng JestJS ( testing framework được giới thiệu chung với NestJS). Do đó mục này sẽ gồm 2 phần:

  1. Tìm hiểu và thực hành 1 số khái niệm cùng với JestJS
  2. Tìm hiểu và thực hành Unit Test cùng với JestJS trên nên tảng web/api được viết bằng NestJS

Tìm hiểu và thực hành một số khái niệm cùng với JestJS

Cùng thực hành viết unit test cho usecase “Login with email and password”

image

Database

image

  1. Create and test auth controller và auth service
  • Validate login dto
  • Login with login dto
  • Find Account by email
  • validate account password
  • generate user access token

Validate login dto

npm i --save class-validator class-transformer

Tham khảo