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.

  • 🔘 Vai trò của khung: Jasmine kiểm tra bất kỳ JavaĐoạn mã này không cần trình duyệt, DOM hoặc thư viện hỗ trợ.
  • ☑️ Thiết lập môi trường: Cài đặt mô-đun, chạy lệnh jasmine init, sau đó kiểm tra tệp spec/support/jasmine.json.
  • Mẫu thông số kỹ thuật: Hàm `describe` đặt tên cho một bộ mã, định nghĩa một đặc tả, và `expect` khẳng định kết quả.
  • 🧪 Người ghép cặp: Các lớp toBe, toEqual, toContain, toThrow và toHaveBeenCalled bao gồm hầu hết các khẳng định.
  • 🛠️ Vận động viên chạy bộ hiện đại: Gói jasmine được duy trì hiện tại thay thế cho mô-đun jasmine-node không còn được duy trì.
  • 📊 Lựa chọn khung phần mềm: Jasmine thực hiện các khẳng định và theo dõi, trong khi Jest bổ sung thêm các lần chạy song song và ảnh chụp nhanh.

Hướng dẫn sử dụng framework Jasmine để kiểm thử đơn vị cho ứng dụng Node.js.

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.

Tệp cấu hình Jasmine trong thư mục hỗ trợ spec hiển thị thư mục spec và spec_files

  1. 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.
  2. Đ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.

Module Add.js xuất khẩu hàm AddNumber trả về tổng của hai tham số.

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};

Code Giải thích

  1. 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.
  2. 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.
  3. 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.

Tệp add-spec.js với một describe suite và một it spec khẳng định AddNumber trả về 11

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

  1. 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.
  2. 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”.
  3. 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'.
  4. 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.
  5. 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

  1. Để chạy thử nghiệm, người ta cần chạy lệnh Jasmine.
  2. Ả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.

Hiển thị thông tin đầu ra trên bảng điều khiển của lệnh jasmine báo cáo về bài kiểm tra add-spec đã được thực thi.

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
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
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à 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.

Câu Hỏi Thường Gặp

Jasmine đọc spec_dir như một tiền tố, sau đó đọc mọi mẫu glob được liệt kê trong spec_files, vì vậy chỉ những tệp phù hợp mới được chạy. Các đường dẫn bắt đầu bằng dấu chấm than sẽ bị loại trừ, và các hàm hỗ trợ được tải một lần trước khi các spec chạy để đăng ký thiết lập dùng chung.

Khai báo phương thức `async` và chờ cuộc gọi, trả về một promise, hoặc chấp nhận callback `done`. hướng dẫn bất đồng bộ cảnh báo rằng lệnh `done` phải được thực thi chính xác một lần, nếu không các lỗi sẽ được ghi vào thông số kỹ thuật sai.

Truyền đường dẫn hoặc mẫu glob sau trình chạy, ví dụ: `npx jasmine spec/appSpec.js`. Cờ `--filter` chấp nhận một mẫu khớp với tên được mô tả, giúp phản hồi nhanh chóng trong khi bạn làm việc trên một bộ kiểm thử duy nhất.

nút hoa nhài Gói này đang ở chế độ bảo trì, vẫn tích hợp Jasmine 1.3 và liệt kê Node.js 10 và 12 là phiên bản hiện tại. Gói jasmine chính thức tracks là framework và các bản phát hành Node.js được hỗ trợ thay thế.

Nếu thêm tiền tố x vào một spec, ví dụ như xit hoặc xdescribe, thì Jasmine sẽ báo cáo nó ở trạng thái chờ xử lý. Nếu thêm tiền tố f, ví dụ như fit hoặc fdescribe, thì chỉ những spec được chọn mới được chạy. Hãy xóa cả hai tiền tố trước khi commit.

Các trợ lý AI soạn thảo mô tả các khối, bộ so khớp và các trường hợp ngoại lệ từ một mô-đun hiện có chỉ trong vài giây, và chúng gắn cờ các bộ kiểm thử bị lỗi không thường xuyên. Mỗi bản đặc tả được tạo ra vẫn cần được xem xét lại, bởi vì một khẳng định chắc chắn về hành vi sai trái sẽ che giấu khuyết điểm.

Trợ lý GitHub Công cụ này tự động hoàn thành nội dung đặc tả khi bạn gõ và chế độ tác nhân của nó có thể mở một yêu cầu kéo (pull request) để sửa chữa các đặc tả bị lỗi sau khi tái cấu trúc. Hãy coi sự khác biệt (diff) như một đề xuất và tự chạy bộ kiểm thử.

Angular vẫn sử dụng cấu trúc khung của các thông số kỹ thuật Jasmine, và protractor Trước đây, Jasmine được sử dụng làm framework mặc định trước khi bị ngừng hỗ trợ. Hiện tại, các nhóm kết hợp Jasmine với Karma cho trình duyệt hoặc chuyển các luồng xử lý trình duyệt sang Karma. Cypress và Nhà viết kịch.

Tóm tắt bài viết này với: