Xem 30,492
Cập nhật nội dung chi tiết về Hướng Dẫn Viết Unit Test Trong Angular mới nhất ngày 20/05/2022 trên website Hanoisoundstuff.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất. Cho đến nay, bài viết này đã thu hút được 30,492 lượt xem.
--- Bài mới hơn ---
Lợi ích của Unit test
- Cải thiện design: Bắt tay vào code mà không để ý quá nhiều đến design là một lỗi phổ biến của các developer, việc viết unit test sẽ bắt buộc bạn phải suy nghĩ, thậm chí nghĩ đi nghĩ lại về design
- Dễ dàng refactor: bởi vì bạn đã có các case test đảm bảo code của bạn chạy đúng như mong đợi, bạn có thể dễ dàng refactor code mà không lo sẽ tạo ra những bug mới
- Test là một tài liệu về spec: nếu viết test chuẩn và đủ case, thì chỉ cần đọc test, ta cũng có thể hiểu rõ spec còn nhanh hơn cả đọc code
- Việc viết test giúp developer tự tin hơn
Bạn có thể cho rằng việc viết test quá tốn thời gian, nhất là viết test FE, có khi nó còn lâu hơn cả viết code nữa, nhưng mình nghĩ nó sẽ giúp tiết kiệm thời gian hơn khi bạn muốn refactor code hay phát triển tính năng mới, giảm thiểu được cả thời gian để fix bug so với việc không viết test.
Giờ chúng ta sẽ bắt tay vào một ví dụ nhỏ nhưng khá đầy đủ sử dụng Angular, Jasmine và Karma. Phần tiếp theo của bài viết sẽ đề cập đến những điều sau:
- Giải thích một chút về Karma và Jasmine
- Karma config
- Tạo một file test đơn giản
- Test angular form
- Test component với service
Tạo project Angular với Jasmine và Karma
Install angular-cli và tạo project mới
Giải thích 1 chút về Jasmine và Karma không lại bảo nãy giờ cứ nói hoài mà không biết là gì
- Jasmine: là một framework dùng để viết test, nó có các function có sẵn hỗ trợ viết các loại test khác nhau
- Karma: là một Javascript tool được sử dụng để load ứng dụng và thực thi test của bạn. Karma sẽ được thực thi bằng dòng lệnh và sẽ hiển thị kết quả cho bạn biết mỗi khi bạn chạy trình duyệt.
Để chạy thử chỉ cần gõ ng test
. Lệnh này sẽ thực thi các case test, mở trình duyệt, hiển thị kết quả trên trình duyệt và trong console.
Karma config
Giờ hãy nhìn vào file Karma config được sinh ra từ angular-cli
Bắt đầu với một file test đơn giản
Lướt qua 1 chút thì ở đây chúng ta đã
- import các thư viện angular testing mà chúng ta sẽ sử dụng
- Import các component phụ thuộc
- Sử dụng
describe
để bắt đầu phần viết test với title trùng với tên component test. - Sử dụng
async
trước mỗi case test, mục đích là để các phần code không đồng bộ có thể kết thúc trước khi tiếp tục, nó tương tự với cách dùng async lúc viết code ý.
Trước khi chạy bất cứ case test nào trong Angular, bạn cần phải config Angular testbed. Nó giúp tạo 1 môi trường cho component đang được test. Bất cứ module, component, service nào mà component bạn đang test cần, thì đều phải được đưa vào trong testbed. Cuối cùng, sau khi config xong, bạn sẽ gọi đến hàm compileComponents()
.
Tiếp theo, chúng ta có 2 case test. Mình sẽ giải thích từng case một:
Case đầu tiên, chúng ta sẽ kiểm tra xem component có thực sự chứa text chúng ta kì vọng trong phần title hay không. Đầu tiên, chúng ta cần 1 instance của app.component, vì vậy chúng ta sử dụng hàm createComponent()
, tạo 1 đối tượng fixture, cho phép chúng ta tạo 1 instance của component. Sau khi đã có instance của app.component, chúng ta có thể kiểm tra giá trị của thuộc tính title có giống với text chúng ta kì vọng hay không bằng hàm toEqual()
.
Test angular form
Bắt đầu với 1 file HTML chúng tôi có chứa form
Form này khá đơn giản nên không cần giải thích gì nhiều. Nút submit sẽ bị disabled nếu form invalid.
Tiếp theo đến contact.component.ts
Giờ đến file test
Trông phức tạp hơn nhiều so với file test trên nhỉ, đừng lo, mình sẽ giải thích cụ thể từng phần đây
Đầu tiên vẫn là phần import, không có gì khác lắm, ngoại trừ import thêm By
để chọn element từ DOM.
Trong beforeEach()
, ta dùng promise
cho hàm compileComponent()
, khi promise
được resolved, chúng ta sẽ tạo instance của component trong này luôn, để đỡ phải viết lại trong mỗi case test.
Case đầu tiên chỉ đơn giản là kiểm tra giá trị thuộc tính text
của component.
Case thứ 2 kiểm tra giá trị của biến submitted
là true khi hàm onSubmit()
được gọi đến.
Case thứ 4 kiểm tra khi truyền vào những giá trị invalid, thuộc tính valid của form sẽ là false.
Cuối cùng, case thứ 5 ngược lại với case thứ 4, khi truyền vào những giá trị valid, thuộc tính valid của form sẽ là true.
Trước khi kết thúc bài viết, chúng ta sẽ đến với phần cuối cùng, là làm sao xử lý service khi component cần test sử dụng chúng.
Test component với service
Ví dụ một component sử dụng service
Component này sẽ gọi sang service để lấy danh sách users, lúc viết test thì việc lấy users từ đâu cũng ko quan trọng, nên ta có thể tạo component mocking cho service này.
Về cơ bản thì cũng giống mấy ví dụ trên, chỉ khác ở chỗ khi UserService
được gọi đến, nó sẽ thay bằng UserServiceMock
. UserServiceMock
là một dummy service để trả về dummy data để chạy test. Vậy thôi, đó là cách bạn nên dùng để mock service cho component.
Nguồn: https://medium.com/swlh/angular-unit-testing-jasmine-karma-step-by-step-e3376d110ab4
--- Bài cũ hơn ---
Bạn đang đọc nội dung bài viết Hướng Dẫn Viết Unit Test Trong Angular trên website Hanoisoundstuff.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!