0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Hướng Dẫn Chi Tiết Viết Unit Test Trong Javascript Sử Dụng Jest - Phần 2

Đăng vào 3 tuần trước

• 4 phút đọc

Giới Thiệu

Chào mừng bạn trở lại với phần thứ hai của chuỗi bài viết về unit test với Jest! Trong phần này, chúng ta sẽ khám phá cách cài đặt và viết unit test một cách chi tiết nhất. Bên cạnh đó, mình cũng sẽ giải thích một số thuật ngữ thường gặp trong unit test, giúp bạn hiểu rõ hơn về cách giao tiếp trong cộng đồng lập trình viên.

Từ Ngữ Cơ Bản

Trong thế giới lập trình, chúng ta thường gặp phải những thuật ngữ như formalinformal. Để làm rõ hơn, hãy xem xét thuật ngữ Test DoubleMock. Trong ngữ cảnh unit test, từ Mock thường được sử dụng như một cách nói informal, trong khi Test Double là cách gọi formal hơn. Việc hình thành nhiều thuật ngữ như vậy giúp chúng ta giao tiếp dễ dàng hơn trong hoàn cảnh cụ thể.

Thông Tin Gói Phần Mềm

Trước khi bắt đầu, hãy xem qua danh sách các gói phần mềm chúng ta sẽ sử dụng:

  • "body-parser": "^1.20.2",
  • "express": "^4.19.2",
  • "mysql2": "^3.9.5",
  • "sequelize": "^6.37.3",
  • "jest": "^29.7.0".

Bạn có thể tải source code của bài viết này tại đây.

Cài Đặt Môi Trường

Trước tiên, hãy tạo một thư mục để bắt đầu với unit test. Bạn có thể sử dụng bất kỳ thư mục nào trên máy của mình. Ví dụ, bạn có thể vào thư mục Documents và thực hiện các lệnh sau:

Copy
$ mkdir testing_with_jest
$ cd testing_with_jest
$ npm init -y
$ npm i jest@29.7.0 --save-dev
$ npm i body-parser@1.20.2 express@4.19.2 mysql2@3.9.5 sequelize@6.37.3
$ npm init jest@29.7.0

Sau khi nhập xong lệnh npm init jest@29.7.0, bạn hãy chọn các tùy chọn mà mình mong muốn, và thêm cấu hình vào phần scripts trong file package.json của bạn.

Viết Unit Test Đầu Tiên

Để tạo một file test cho Jest, bạn cần đặt tên theo quy tắc sau: <tên_file>.spec.js hoặc <tên_file>.test.js. Chúng ta sẽ viết test cho hàm isEven.js như sau:

javascript Copy
// src/isEven.js
const isEven = (number) => {
  return number % 2 === 0;
};

module.exports = isEven;

Hàm isEven nhận một tham số là number, và sẽ trả về true nếu là số chẵn và false nếu là số lẻ. Vậy chúng ta có hai trường hợp cần kiểm thử:

  • Khi đối số là số chẵn, hàm sẽ trả về true.
  • Khi đối số là số lẻ, hàm sẽ trả về false.

Để viết các test case trong Jest, chúng ta sử dụng hàm test() với hai tham số: tên của test case và một hàm thực hiện các assertions:

javascript Copy
// isEven.spec.js
const isEven = require('./isEven.js');

test("isEven trả về true với số chẵn", () => {
  expect(isEven(2)).toBe(true);
});

test("isEven trả về false với số lẻ", () => {
  expect(isEven(3)).toBe(false);
});

Chạy lệnh sau trong terminal để thực hiện các test:

Copy
$ npm run test

Hãy tiếp tục và kiểm tra xem unit test của bạn đã chạy thành công chưa!

Thực Hành Sử Dụng Fixtures

Bạn có thể sử dụng test.each() để đơn giản hóa quy trình viết test khi xử lý nhiều giá trị cố định. Ví dụ:

javascript Copy
const integerEvenNumbers = [2, 100, 6, 20];
const integerOddNumbers = [1, 3, 101, 2001, 23];

test.each(integerEvenNumbers)(
  "isEven trả về true với số chẵn %i", 
  (evenNumber) => expect(isEven(evenNumber)).toBe(true) 
);

test.each(integerOddNumbers)(
  "isEven trả về false với số lẻ %i", 
  (oddNumber) => expect(isEven(oddNumber)).toBe(false) 
);

Nhóm Các Test Case Thành Test Suite

Khi cần tổ chức các test case có liên quan, bạn có thể dùng describe() để nhóm chúng lại. Ví dụ:

javascript Copy
describe("isEven", () => {
  const evenNumbers = [2, 100, 6, 20];
  const oddNumbers = [1, 3, 101, 2001, 23];

  it.each(evenNumbers)("isEven trả về true với số chẵn %i", (evenNumber) => {
    expect(isEven(evenNumber)).toBe(true);
  });

  it.each(oddNumbers)("isEven trả về false với số lẻ %i", (oddNumber) => {
    expect(isEven(oddNumber)).toBe(false);
  });
});

Kiểm Tra Độ Phủ (Coverage)

Để lấy báo cáo độ phủ của các unit test, bạn có thể dùng flag --coverage:

Copy
$ npm run test --coverage

Lưu ý rằng việc đạt độ phủ 100% không đảm bảo bạn đã kiểm tra đầy đủ mọi trường hợp, nhưng nó cho thấy mọi dòng mã đã được chạy qua test.

Kết Luận

Trong bài viết này, chúng ta đã cùng nhau tìm hiểu cách viết một unit test đơn giản, cách tổ chức các test case và cách kiểm tra độ phủ của test. Công cụ Jest giúp chúng ta dễ dàng hơn trong việc kiểm thử phần mềm, từ đó đảm bảo chất lượng mã nguồn tốt hơn. Ở các phần tiếp theo, hãy cùng mình khám phá sâu hơn cách viết test trong các dự án thực tế!

Tài Liệu Tham Khảo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào