Hướng dẫn về Jasmine Framework: Kiểm tra đơn vị với ví dụ
⚡ Tóm tắt thông minh
Jasmine là người hành xử theo bản năng. JavaKhung kiểm thử kịch bản chạy các bài kiểm thử đơn vị Node.js mà không cần trình duyệt hoặc DOM, sử dụng các khối describe, các bộ so khớp specs và expect để xác minh rằng mọi hàm được xuất ra đều hoạt động như được ghi trong tài liệu.
JasmineJS là gì?
Jasmine là một mã nguồn mở và phổ biến nhất JavaKhung thử nghiệm thư viện tập lệnh để thử nghiệm bất kỳ loại nào JavaỨng dụng tập lệnh. Jasmine tuân theo quy trình Phát triển theo hành vi (BDD) để đảm bảo rằng mỗi dòng JavaCâu lệnh script được kiểm tra đơn vị đúng cách.
Khung Jasmine được sử dụng để làm gì?
Kiểm thử là yếu tố then chốt đối với bất kỳ ứng dụng nào. Đối với kiểm thử đơn vị Node.js, framework có sẵn để kiểm thử được gọi là Jasmine. Vào đầu những năm 2000, đã có một framework dành cho việc kiểm thử. JavaScript các ứng dụng có tên JsUnit. Later khung này đã được nâng cấp và hiện được gọi là Jasmine.
Jasmine giúp tự động Kiểm tra đơn vị, điều này đã trở thành một thông lệ khá quan trọng khi phát triểnping và triển khai các ứng dụng web hiện đại.
Trong hướng dẫn Jasmine này, bạn sẽ tìm hiểu cách thiết lập môi trường của mình với Jasmine và cách chạy thử nghiệm Jasmine cho ứng dụng Node.js đầu tiên của bạn.
Jasmine để thử nghiệm các ứng dụng Node.js
Hoa nhài là một Phát triển theo định hướng hành vi (BDD) khung thử nghiệm cho JavaKịch bản. Nó làm không dựa vào trình duyệt, DOM hoặc bất kỳ JavaKhung kịch bản. Do đó, nó phù hợp cho các trang web. Node.js các dự án, hoặc bất cứ nơi nào JavaCó thể chạy tập lệnh. Để bắt đầu sử dụng Jasmine, trước tiên bạn cần tải xuống và cài đặt các mô-đun Jasmine cần thiết.
Cách thiết lập môi trường thử nghiệm Jasmine
Bước tiếp theo trong hướng dẫn Jasmine Node.js này, bạn cần khởi tạo môi trường và kiểm tra tệp cấu hình Jasmine. Các bước dưới đây hướng dẫn cách thiết lập Jasmine trong môi trường của bạn.
Bước 1) Cài đặt mô-đun NPM
Bạn cần phải Cài đặt NPM Mô-đun jasmine cho phép sử dụng framework Jasmine từ bên trong ứng dụng Node.js. Để cài đặt mô-đun jasmine-node, hãy chạy lệnh sau.
npm install jasmine-node
Ghi chú phiên bản (2026): Lệnh lịch sử ở trên vẫn hoạt động, nhưng nút hoa nhài Module này đang ở chế độ bảo trì và tích hợp Jasmine 1.3, vì vậy chỉ nên giữ lại nó cho các dự án cũ. Công việc Node.js mới sẽ cài đặt phiên bản được bảo trì. Jasmine CLI như một dependency dành cho quá trình phát triển và gọi nó thông qua npx:
npm install --save-dev jasmine npx jasmine init
Jasmine 6.x Đây là dòng mã chính hiện tại và hỗ trợ Node.js 20, 22 và 24, trong đó Node.js 24 là phiên bản LTS chính thức vào năm 2026.
Bước 2) Khởi tạo môi trường Jasmine
Khởi tạo dự án – Bằng cách này, Jasmine sẽ tạo thư mục `spec` và tệp cấu hình `json` cho bạn. Thư mục `spec` được sử dụng để lưu trữ tất cả các tệp kiểm thử của bạn. Nhờ đó, Jasmine sẽ biết vị trí của tất cả các bài kiểm thử và có thể thực thi chúng một cách phù hợp. JSON Tệp này được sử dụng để lưu trữ thông tin cấu hình cụ thể về Jasmine.
Để khởi tạo môi trường Jasmine, hãy chạy lệnh sau:
jasmine init
Bước 3) Kiểm tra tập tin cấu hình của bạn.
Tệp cấu hình sẽ được lưu trữ trong thư mục spec/support dưới dạng Jasmine.json. Tệp này liệt kê các tệp nguồn và tệp thông số kỹ thuật mà bạn muốn trình chạy Jasmine đưa vào.
Ảnh chụp màn hình bên dưới hiển thị một ví dụ điển hình về tệp jasmine.json của Jasmine.
- Lưu ý rằng thư mục spec được chỉ định ở đây. Như đã lưu ý trước đó, khi Jasmine chạy, nó sẽ tìm kiếm tất cả các bài kiểm tra trong thư mục này.
- Điều tiếp theo cần lưu ý là tham số spec_files - Điều này biểu thị rằng bất kỳ tệp thử nghiệm nào được tạo, chúng phải được thêm vào từ khóa 'spec'.
Lưu ý cấu hình: Trong Jasmine 6.x, tệp tin tương tự cũng chấp nhận người giúp việc, được tải một lần trước mỗi lần kiểm thử, và một env Khối chứa các tùy chọn như random và stopSpecOnExpectationFailure. Mẫu glob spec_files mặc định là **/*[sS]pec.?(m)jsvà có thể truyền một tệp khác bằng –Config hoặc là ĐƯỜNG DẪN CẤU HÌNH JASMINE biến.
Tiếp theo trong hướng dẫn về khung Jasmine này, chúng ta sẽ tìm hiểu cách sử dụng Jasmine để kiểm tra các ứng dụng Node.js.
Cách sử dụng Jasmine để kiểm tra ứng dụng Node.js
Để sử dụng thử nghiệm đơn vị Jasmine cho các ứng dụng Node.js, cần phải tuân theo một loạt các bước.
Trong ví dụ dưới đây, chúng ta sẽ định nghĩa một module cộng hai số cần được kiểm thử. Sau đó, chúng ta sẽ định nghĩa một tập tin mã riêng biệt chứa mã kiểm thử và sử dụng Jasmine để kiểm thử hàm cộng tương ứng.
Bước 1) Xác định mã cần được kiểm tra. Chúng ta sẽ định nghĩa một hàm sẽ cộng 2 số và trả về kết quả. Mã này sẽ được viết trong một tệp có tên là “Add.js”.
Ảnh chụp màn hình bên dưới hiển thị mô-đun Add.js đã hoàn chỉnh, và đoạn mã tương tự được lặp lại dưới dạng văn bản bên dưới.
var exports=module.exports={}; exports.AddNumber=function(a,b) { return a+b; };
Code Giải thích
- Từ khóa “xuất” được sử dụng để đảm bảo rằng chức năng được xác định trong tệp này thực sự có thể được truy cập bởi các tệp khác.
- Sau đó chúng tôi định nghĩa một hàm có tên là 'AddNumber.' Hàm này được xác định để lấy 2 tham số a và b. Chức năng này được thêm vào mô-đun “xuất” để biến chức năng này thành một chức năng công khai mà các mô-đun ứng dụng khác có thể truy cập.
- Cuối cùng, chúng ta đã làm cho hàm của mình trả về giá trị gia tăng của các tham số.
Bước 2) Tiếp theo, chúng ta cần định nghĩa mã kiểm thử Jasmine, mã này sẽ được sử dụng để kiểm thử hàm “Add” trong tệp Add.js. Đoạn mã dưới đây cần được đặt trong một tệp có tên là add-spec.js.
Lưu ýTừ 'spec' cần được thêm vào tệp kiểm thử để Jasmine có thể nhận diện được.
Ảnh chụp màn hình bên dưới hiển thị cùng một tệp thông số kỹ thuật đang được mở trong trình soạn thảo.
var app=require("../Add.js"); describe("Addition",function(){ it("The function should add 2 numbers",function() { var value=app.AddNumber(5,6); expect(value).toBe(11); }); });
Code Giải thích
- Trước tiên, chúng ta cần đưa tệp Add.js của mình vào để có thể kiểm tra chức năng 'AddNumber' trong tệp này.
- Chúng tôi hiện đang tạo mô-đun thử nghiệm của mình. Phần đầu tiên của mô-đun thử nghiệm là mô tả một phương thức về cơ bản đặt tên cho thử nghiệm của chúng tôi. Trong trường hợp này, tên thử nghiệm của chúng tôi là “Bổ sung”.
- Phần tiếp theo là đưa ra mô tả cho thử nghiệm của chúng tôi bằng phương pháp 'it'.
- Bây giờ chúng ta gọi phương thức AddNumber và truyền vào 2 tham số 5 và 6. Các tham số này sẽ được truyền đến phương thức AddNumber trong tệp Add.js. Giá trị trả về sau đó được lưu trữ trong một biến có tên là value.
- Bước cuối cùng là thực hiện phép so sánh hoặc kiểm tra thực tế. Vì chúng ta mong đợi giá trị trả về từ hàm AddNumber là 11, nên chúng ta định nghĩa điều này bằng cách sử dụng phương thức expect(value).toBe(giá trị mong đợi).
Đầu ra
- Để chạy thử nghiệm, người ta cần chạy lệnh Jasmine.
- Ảnh chụp màn hình bên dưới cho thấy sau khi lệnh jasmine được chạy, nó sẽ phát hiện ra một bài kiểm tra có tên là add-spec.js và thực thi bài kiểm tra đó. Nếu có bất kỳ lỗi nào trong quá trình kiểm tra, lỗi sẽ được hiển thị tương ứng.
Ví dụ Add chỉ sử dụng một bộ so khớp duy nhất, nhưng Jasmine cung cấp đầy đủ các bộ so khớp. Bảng dưới đây liệt kê các bộ so khớp bao phủ hầu hết mọi câu lệnh khẳng định mà bạn sẽ viết.
Những loại diêm dán Jasmine bạn sẽ dùng nhiều nhất
Bộ so khớp là phép so sánh theo sau expect(). Nối .not trước bất kỳ bộ so khớp nào để đảo ngược nó, như trong expect(value).not.toBe(11).
| người mai mối | Những gì nó kiểm tra | Sử dụng điển hình |
| tương lai | Sự đồng nhất tuyệt đối, phép so sánh tương tự như === | mong đợi(giá trị).toBe(11) |
| toEqual | Sự bình đẳng sâu sắc giữa các đối tượng và mảng | mong đợi(user).toEqual({id: 1}) |
| chứa | Thành viên bên trong một mảng hoặc một chuỗi | expect(files).toContain('add-spec.js') |
| toBeDefined | Giá trị không phải là không xác định | mong đợi(app.AddNumber).toBeDefined() |
| ném | Hàm được bao bọc gây ra lỗi | mong đợi(callAdd).toThrow() |
| Đã được gọi | Ít nhất một lần, người ta đã viện dẫn đến yếu tố gián điệp. | mong đợi(logger.write).toHaveBeenCalled() |
Hai thói quen giúp cho việc đọc lỗi trở nên dễ dàng hơn. Chỉ sử dụng `toBe` cho các kiểu dữ liệu nguyên thủy và các tham chiếu giống hệt nhau, vì hai đối tượng có cùng nội dung không bao giờ bằng nhau. Sử dụng `toEqual` cho các cấu trúc, và thêm `toHaveBeenCalledWith` khi các đối số quan trọng như chính lời gọi hàm.
Thiết lập, gỡ bỏ và gián điệp trong Jasmine
Các bộ ứng dụng thực sự cần trạng thái chia sẻ và các bản sao cho các thành phần cộng tác chậm. Jasmine cung cấp cả hai mà không cần bất kỳ gói bổ sung nào.
- trước mỗi và sau mỗi Chạy lệnh này trước và sau mỗi phần khai báo thông số kỹ thuật bên trong khối describe, đây là vị trí thích hợp để xây dựng lại các fixture.
- Trước tất cả và sau tất cả Chạy lệnh này một lần cho toàn bộ khối, vì vậy hãy dành chúng cho những công việc tốn kém như mở kết nối.
- spyOn(object, 'method') thay thế một phương pháp thực bằng một tracking double; thêm .and.returnValue() để kiểm soát giá trị trả về.
- jasmine.createSpy('name') Tạo một đối tượng double độc lập cho hàm callback không có đối tượng nào để gắn vào.
- Thông số kỹ thuật bất đồng bộ Có thể được khai báo là async và chờ đợi, có thể trả về một promise, hoặc có thể chấp nhận một hàm callback `done` phải được gọi chính xác một lần.
Các phần mềm gián điệp được thiết lập lại giữa các lần kiểm thử, do đó bộ kiểm thử không bao giờ để lộ phương thức giả lập sang bài kiểm thử tiếp theo. Sự cô lập đó là điều khiến một lần kiểm thử thất bại chỉ ra một lỗi duy nhất thay vì một chuỗi lỗi, đó cũng chính là nguyên tắc được mô tả trong... kiểm tra đơn vị các nguyên tắc cơ bản.
Hoa nhài, cà phê mocha và trò đùa
Jasmine là một trong ba framework chiếm ưu thế. JavaViệc kiểm thử kịch bản, và sự lựa chọn thường phụ thuộc vào việc bạn muốn sở hữu bao nhiêu dây dẫn.
| Yếu tố | Jasmine | một thứ mã nảo | có |
| Khẳng định | Xây dựng vào năm | Thường được thêm vào, Chai | Xây dựng vào năm |
| Gián điệp và kẻ giả mạo | Xây dựng vào năm | Thường được thêm vào, Sinon | Xây dựng vào năm |
| Thực hiện | Nối tiếp | Nối tiếp | Song song giữa các quy trình |
| Snapshots | Không | Không | Có |
| Ngôi nhà chung | Angular, Node.js thuần túy | Các nền tảng Node.js linh hoạt | React và các trình đóng gói hiện đại |
Pick một thứ mã nảo khi bạn muốn tự xây dựng bộ công cụ xác nhận và giả lập của riêng mình, và có Khi chạy song song, phạm vi bao phủ và ảnh chụp nhanh quan trọng hơn việc kiểm soát cấu hình. Jasmine vẫn là lựa chọn nhẹ nhất mà vẫn đầy đủ chức năng, đó là lý do tại sao nó vẫn phổ biến. kiểm tra tự động hóa dãy phòng.




