Mục Lục
1. Tổng quan
Jasmine là một framework kiểm thử JavaScript phổ biến, thiết kế để giúp xây dựng và thực hiện các bài kiểm thử đơn vị (unit tests) một cách dễ đọc và dễ bảo trì. Jasmine hỗ trợ mô hình BDD (Behavior-Driven Development), nơi mô tả ứng xử của mã nguồn được sử dụng như một cách để viết tests.
Dưới đây là một số đặc điểm và khái niệm quan trọng của Jasmine:
1.1. Suite và Spec:
- Suite: Một nhóm các test cases được mô tả bằng hàm
describe
. Nó giúp tổ chức các tests thành các nhóm có ý nghĩa. - Spec: Một test case được mô tả bằng hàm
it
bên trong mộtdescribe
. Mỗiit
mô tả một điều kiện hoặc tính năng cụ thể cần kiểm thử.
1.2. Expectations:
Expectations được sử dụng để kiểm tra kết quả của một giả định hoặc một hành động. Jasmine cung cấp hàm expect
để thực hiện các kiểm tra.
expect(result).toBe(expectedValue);
1.3. Matchers:
Matchers là các hàm được sử dụng trong expect
, đại diện cho các loại kiểm tra khác nhau. Ví dụ: toBe
, toEqual
, toContain
, toBeTruthy
,…
expect(someValue).toBe(42);
1.4. Spy:
Spy là một đối tượng giả mạo (mock object) được sử dụng để theo dõi hàm và xem liệu chúng được gọi như mong đợi hay không.
spyOn(obj, 'methodName');
1.5. BeforeEach và AfterEach:
Các hàm beforeEach
và afterEach
được sử dụng để thiết lập và dọn dẹp trạng thái trước và sau mỗi test case.
beforeEach(() => {
// Setup code
});
afterEach(() => {
// Teardown code
});
1.6. Pending Spec:
Một spec có thể được đánh dấu là chưa được triển khai bằng cách sử dụng xit
hoặc pending
trong it
.
it('should do something', () => {
pending('Not implemented yet');
// or
xit('should do something else', () => {
// ...
});
Jasmine cung cấp một cú pháp đơn giản và linh hoạt cho việc viết tests, giúp xây dựng và duy trì mã nguồn một cách hiệu quả. Nó đã trở thành một lựa chọn phổ biến trong cộng đồng phát triển JavaScript.
2. Ví dụ một testcase dùng Jasmine cơ bản
Dưới đây là một ví dụ về một testcase cơ bản sử dụng Jasmine. Trong ví dụ này, chúng ta sẽ kiểm thử một hàm đơn giản để tính tổng của hai số.
2.1. Tạo một tệp mới, ví dụ calculator.js
, chứa hàm tính tổng:
// calculator.js
function add(a, b) {
return a + b;
}
2.2. Tạo một tệp Jasmine spec để kiểm thử hàm add
. Đặt tên tệp là calculator.spec.js
:
// calculator.spec.js
describe('Calculator', () => {
it('should add two numbers', () => {
// Arrange
const num1 = 5;
const num2 = 7;
// Act
const result = add(num1, num2);
// Assert
expect(result).toBe(12);
});
});
Trong ví dụ này:
describe
: Mô tả một suite (nhóm) của các test cases với tên “Calculator”.it
: Mô tả một spec (test case) cụ thể với tên “should add two numbers”.- Trong
it
, chúng ta thực hiện các bước “Arrange”, “Act”, và “Assert”:- “Arrange”: Thiết lập các điều kiện trước khi thực hiện test.
- “Act”: Thực hiện hành động cần kiểm thử (gọi hàm
add
). - “Assert”: Kiểm tra kết quả với kết quả mong đợi (sử dụng
expect
với matchertoBe
).
2.3. Chạy test bằng Karma:
npx karma start
hoặc karma start
Nếu hàm add
hoạt động đúng, bạn sẽ thấy output trong terminal cho biết test đã được chạy thành công. Ngược lại, nếu có lỗi, Jasmine sẽ cung cấp thông báo về nơi xảy ra lỗi.
Lưu ý: Đảm bảo bạn đã cài đặt Karma và Jasmine cùng với karma-jasmine
plugin trước khi chạy test.
Xin chào các bạn!
Bài viết này dùng AI ChatGPT viết sau đó được tôi chọn lựa, biên tập lại nội dung, chỉ một phần nhỏ các bài là tôi tự viết. Nội dung thể hiện ý chí mang tính cá nhân về các vấn đề của tôi và giải pháp. Tôi lưu tại website này để tra cứu và chia sẻ cho cộng đồng. Tôi tin rằng nội dung này giải quyết vấn đề của tôi thì cũng giải quyết vấn đề của các bạn.
Tôi là Minh, sống tại Hà Nội. Tôi là kỹ sư phần mềm với hơn 20 năm kinh nghiệm. Hiện nay, công việc chính của tôi là phát triển các app trên iOS và Android. Các ngôn ngữ và framework yêu thích của tôi là Swift, Objective-C, Java, Kotlin, .NET, HTML, JavaScript, CSS, Bootstrap, jQuery, AngularJS, Angular…
Các bạn có thể tải app của tôi trên App Store hoặc Google Play:
QuestionBank-Ôn thi vào 10: phiên bản iOS, phiên bản Android
TypingTest by QuestionBank: phiên bản iOS, phiên bản Android
Xin cảm ơn,
Minh