0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Mock Hàm Nhập Khẩu Trong Jest: Phần 3 - Viết Unit Test Hiệu Quả

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

• 3 phút đọc

Chủ đề:

TDDJest MockJest

Giới Thiệu Chung

Trong phần thứ ba của seri "Tất Tần Tật Về Kiểm Thử Đơn Vị Với Jest", mình sẽ hướng dẫn các bạn cách cài đặt và viết unit test cho một dự án nhỏ, giúp bạn nắm rõ hơn về cách mock hàm nhập khẩu.

Mục Tiêu Của Bài Viết

Bài viết này sẽ chủ yếu tập trung vào các khía cạnh của việc kiểm thử. Mình sẽ lược bỏ qua một số phần như controllers, models, và routes để giảm độ dài bài viết, đồng thời tăng tính tập trung vào các unit test.

Ngoài ra, mình đã cấu hình thêm cors cho dự án này. Mặc dù không dự định làm gì thêm, mình muốn tạo điều kiện để mọi người có thể clone dự án và thử nghiệm với các API bằng Postman.

Thông Tin Về Gói Cài Đặt

  • cors: "^2.8.5"
  • dotenv: "^16.4.5"
bash Copy
$ npm install cors@2.8.5 dotenv@16.4.5

Cài Đặt Dự Án

1. Thiết Kế Cơ Sở Dữ Liệu

Mình sẽ tạo một ứng dụng quản lý sách mang tính chất demo. Cơ sở dữ liệu được thiết kế đơn giản với 2 bảng: userbook. Mình sẽ sử dụng MySQL để lưu trữ dữ liệu và dùng Sequelize làm ORM cho ứng dụng này.

2. Thiết Lập Kết Nối Cơ Sở Dữ Liệu

Trước tiên, bạn cần cài đặt sequelize-cli ở chế độ toàn cục:

bash Copy
$ npm install sequelize-cli -g

Sau đó, bạn kiểm tra thư mục hiện tại:

bash Copy
$ pwd
/Users/tienminh/Documents/testing_with_jest
$ cd src/
$ sequelize init

Tiếp theo, hãy tạo file .env để cấu hình các biến môi trường cần thiết. Đừng quên tạo file .env.example để cung cấp các tên key cho mọi người.

3. Tạo Models

Chúng ta sẽ tạo các models cho người dùng và sách:

bash Copy
$ sequelize model:generate --name User --attributes email:string,password:string,name:string,mobile_phone:string
$ sequelize model:generate --name Book --attributes user_id:integer,name:string,title:string

Sau khi tạo ra các models, chúng ta cần khai báo mối quan hệ của chúng trong file src/models/book.jssrc/models/user.js.

4. Tạo Controllers

Chúng ta tạo các controller đơn giản cho UserBook chỉ thực hiện hai chức năng là GETPOST.

Hiểu Rõ Hơn Về Mocking

1. Caching Module Trong Node.js

Theo tài liệu của Node.js:

Các mô-đun sẽ được lưu cache sau lần đầu tiên chúng được tải.

Nó có nghĩa là khi bạn gọi một hàm nhập khẩu từ một mô-đun trong cùng một file, bạn sẽ luôn nhận được cùng một đối tượng.

2. Cơ Chế Hoạt Động Của Mock Trong Jest

Để mock một hàm đã nhập khẩu, chúng ta sẽ sử dụng hàm jest.mock(), mà có thể nhận 3 tham số:

  • moduleName: đường dẫn đến file cần mock.
  • factory: (tùy chọn) là một hàm để mock.

3. Cách Mock Hàm Nhập Khẩu

Chúng ta sẽ tạo một ví dụ đơn giản với jest.mock() trong một file kiểm thử:

javascript Copy
const isEven = require("./isEven.js");
jest.mock("./isEven.js", () => () => true);

Viết Unit Test Cho Controllers

1. Kiểm Thử User

javascript Copy
// src/tests/controllers/user.controller.spec.js
const { createUser, getUser } = require("../../controllers/user.controller.js");
const db = require("../../models/index.js");

jest.mock("../../models/index.js", () => ({
  User: { create: jest.fn(), findOne: jest.fn() }
}));

describe("UserController", () => {
  // ...
});

2. Kiểm Thử Book

javascript Copy
// src/tests/controllers/book.controller.spec.js
const { createBook, getBook } = require("../../controllers/book.controller.js");
const db = require("../../models/index.js");

jest.mock("../../models/index.js", () => ({
  Book: { create: jest.fn(), findAll: jest.fn() }
}));

describe("BookController", () => {
  // ...
});

Kết Luận

Chúng ta đã đi sâu vào cách mock các module trong Jest. Hi vọng bài viết đã giúp bạn hiểu rõ hơn về cách viết unit test chất lượng cho các thành phần trong ứng dụng của bạn. Ở phần tiếp theo, chúng ta sẽ khám phá thêm về việc viết unit test cho các class và cách sử dụng spy trong kiểm thử.

Tài Liệu Tham Khảo

source: viblo

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