Xem Nhiều 2/2023 #️ Tìm Hiểu Unit Testing Trongcore # Top 11 Trend | Toiyeucogaihalan.com

Xem Nhiều 2/2023 # Tìm Hiểu Unit Testing Trongcore # Top 11 Trend

Cập nhật thông tin chi tiết về Tìm Hiểu Unit Testing Trongcore mới nhất trên website Toiyeucogaihalan.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.

Tìm hiểu Unit Testing trong chúng tôi Core

Unit test là gì?

Unit test đơn giản giúp chúng ta kiểm tra tính đúng đắn của một đơn vị code (hầu hết là các method) có làm việc như mong muốn không? Nó cho phép bạn kiểm tra các phương thức độc lập và kiểm tra các logic với các điều kiện dữ liệu khác nhau.

Tại sao phải dùng Unit test?

Một lý do lớn là unit test giúp dễ dàng thay đổi code hơn nhiều khi chúng ta chắc rằng chúng ta không thay đổi tính năng (refactoring) mà chỉ là tối ưu code thôi. Điều này có nghĩa là unit test giúp bạn có thể dễ dàng phát hiện ra những chỗ bị lỗi khi thay đổi code nhờ các test case báo fail ở bất kỳ function nào. Điều này rất tuyệt vời bởi vì các bug bị giảm đi rất nhiều trong ứng dụng của chúng ta ngay từ các đơn vị code nhỏ nhất. Bug càng phát hiện sớm càng giảm chi phí cho việc fix.

Unit test làm cho thiết kế tốt hơn

Unit test giúp ảnh hưởng đến thiết kế của chúng ta bằng cách luôn theo xu hướng giảm sự phụ thuộc giữa các module đến mức cao nhất. Nếu một số chỗ không thể test được thì tức là có sự phụ thuộc không hề nhẹ ở đây tức là thiết kế chưa được tối ưu cho việc test cũng như bảo trì (tightly coupled). Khi chúng ta thiết kế các class với unit test trong tư duy bạn sẽ tập trung vào việc tách ra các thành phần độc lập và có thể test được.

Trong một số trường hợp, bạn thường không phải nghĩ về thiết kế. Các unit test sẽ hướng dẫn bạn chắc chắn rằng các logic là đúng và các thành phần được thiết kế tách biệt và giảm sự phụ thuộc thông qua việc sử dụng các abstraction và dependency injection. Điều này có được nếu như chúng ta thiết kế tuân theo Single Reponsibility Principle (nguyên tắc S trong SOLID).

Tìm hiểu về test-driven development

Mình thường viết code ngắn và sau đó viết lên dần dần song song với việc viết các unit test và thực hành như vậy tôi gọi là tư duy hướng test (test driven thinking). Test-driven development (TDD) là một quy trình khác khi mà các test được viết trước cả khi viết code. Các test như là các đặc tả (spec) mà bạn phải viết test khi function chưa được hình thành. Ban đầu test sẽ fail vì chưa có code tồn tại. Sau đó bạn chỉ cần viết code để cho các test case đó pass.

Trong khi TDD thường hướng tới unit testing, unit testing thì lại không yêu cầu phải làm TDD. Tôi muốn các bạn rõ điều này vì nó hơi bị dễ nhầm lẫn giữa các term này.

Thêm unit test vào project

Một cách tiếp cận tốt để unit test trong .NET là thêm các test vào solution của chúng ta dưới dạng class library hoàn toàn tách biệt với các project code chính. Giờ chúng ta sẽ thêm mới một .NET Core Class library vào solution như hình.

Tiếp đến là thêm một unit test framework, mình sử dụng xUnit được hỗ trợ cho .NET core và làm việc với tính năng có sẵn trong Visual Studio là Test Runner. Nunit cũng là một framework phổ biến khác, có một số khác nhau giữa 2 thằng này nhưng tựu chung là nó gần như nhau.

Thêm các thư viện bổ sung để mock tức là giả lập các đối tượng với các logic khác nhau và dữ liệu khác nhau trong unit test. Điều này có thể tham khảo tại bài viết này về mock, stubbing và faking đối tượng ở đây. Chúng ta sẽ dành 1 phút để sử dụng thư viện Moq để giả lập các hành vi của một interface trong test case, đây là tính năng rất mạnh mẽ của unit test.

Cuối cùng chúng ta cần Add reference từ project test đến project code chính để truy cập các class cho việc test.

Viết unit test

Ok vậy chúng ta đã hiểu một số lý thuyết rồi, bao gồm có việc hiểu khái niệm unit test, tại sao phải dùng chúng. Chúng ta sẽ test ứng dụng với xUnit framework.

Test đầu tiên chúng ta sẽ sử dụng class TeamStatCalculator. Cụ thể là method GetTotalGoalsForSeason()

public class TeamStatCalculator { private readonly ITeamStatRepository _teamStatRepository; public TeamStatCalculator(ITeamStatRepository teamStatRepository) { _teamStatRepository = teamStatRepository; } public int GetTotalGoalsForSeason(int seasonId) { var teamStatsBySeason = _teamStatRepository } }

Cả nhà thấy nó giống với cách viết của project TEDU-17 không? Đi vào chi tiết chúng ta có thể thấy phương thức này đơn giản là query từ _teamStatRepository và lấy ra danh sách các đội bóng theo mùa sau đó gọi hàm Sum() trong Linq để trả ra tổng bàn thắng cho toàn bộ. Quá dễ phải không nào?

Một điều ghi nhớ là chúng ta có thể thấy _teamStatRepository là một thành phần phụ thuộc được inject vào thông qua constructor. Trong thực tế, repository này có thể lấy dữ liệu từ database, một file hoặc một Rest API nào đó nhưng chúng ta không cần quan tâm vì chúng ta ủy thác việc lấy dữ liệu từ nguồn nào cho phần triển khai của IteamStatRepository interface. Chúng ta chỉ quan tâm là với một interface trừu tượng như thế nó có các phương thức trừu tượng và không dính gì đến phần triển khai. Chúng ta sẽ thấy vì sao điều này rất quan trọng ngay sau đây. Thêm nữa, nếu code test của bạn viết vào 1 file, mở database lên thông qua connection hoặc làm gì đó thông qua network thì nó sẽ thành test tích hợp mất (integration test) rồi. Cái này là phạm trù khác của test.

[Fact] public void GetTotalGoalsForSeason_returns_expected_goal_count() { var mockTeamStatRepo = new Mock(); mockTeamStatRepo { new TeamStatSummary {SeasonId = 1,Team = "team 1",GoalsFor=1}, new TeamStatSummary {SeasonId=1,Team = "team 2",GoalsFor=2}, new TeamStatSummary {SeasonId = 1,Team = "team 3",GoalsFor=3} }); var teamStatCalculator = new TeamStatCalculator(mockTeamStatRepo.Object); var result = teamStatCalculator.GetTotalGoalsForSeason(1); we should get this back from the method Assert.True(result==6); }

Cấu trúc unit test

Unit test của chúng ta nên follow theo cách tiếp cận “AAA”:

Arrange làm các công việc cài đặt hay chuẩn bị dữ liệu cần thiết;

Act là thực thi function hay method cần được test và lấy kết quả.

Assert là verify kết quả trả (actual result) ra có đúng như mong muốn không (expected result)

Chúng ta có thể thấy một mớ test code xuất hiện trong phần Arrange. Đó là chúng ta tạo một mock cho IteamStatRepository và định nghĩa vài hành vi của nó cũng như dữ liệu sẽ trả về nếu gọi hàm FindAll(). Chúng ta sẽ inject đối tượng vừa mock vào TeamStatCalculator khi tạo ra nó.

Nếu chúng ta không cho phép inject Repository từ ngoài vào thì không thể giả lập được nó và setup được các hành vi như FindAll() trả về cái gì được mà nó sẽ bị đóng gói cứng ở trong triển khai của TeamStatRepository rồi, vậy là DI rất quan trọng cho unit test.

Khi setup hoàn thành, act sẽ đơn giản là gọi method cần test với GetTotalGoalsForSeason(1) tham số là 1 và nhận kết quả. Chỉ có một dòng nhỏ trong test nhưng nếu bạn hạy test khi debug bạn sẽ thấy nó thực sự kỳ diệu. Đây là sự kỳ diệu của IoC/DI. Chúng ta hoàn toàn nghịch đảo việc tạo repository và có thể khiến nó làm bất cứ điều gì.

Cuối cùng, trong phần assert của chúng ta, bạn biết sẽ có 6 bàn thắng trong test data và vì thế phương thức của bạn làm việc đúng.

Chạy unit test trong Visual Studio với Test Explorer và nhận kết quả pass màu xanh.

Thay vào đó, bạn có thể run test với command line trong công cụ CLI mới. Trong thư mục project đơn giản là run dotnet test để chạy test runner từ command line.

Unit test controller

Controller là một thành phần quan trọng trong ứng dụng chúng tôi Core, chúng ta cũng phải test nó để đảm bảo toàn bộ luồng hoạt động trơn chu. Chúng ta thường muốn controller của mình nhỏ và không thực hiện bất cứ logic nào hoặc là truy cập dữ liệu. Chúng ta chỉ cần verify là controller action nhận đầu vào sau trả ra kết quả là được.

Hãy viết unit test cho method Index() trong HomeController

public IActionResult Index([FromServices] IGameRepository gameRepository) { var model = new IndexViewModel { Players = _playerRepository.GetAll().ToList(), Games = gameRepository.GetTodaysGames().ToList() }; return View(model); }

Sau đó chúng ta có hàm test:

[Fact] public void Index_returns_viewresult_with_list_of_players_and_games() { var mockPlayerRepo = new Mock(); { new Player {Name = "Sidney Crosby"}, new Player {Name="Patrick Kane"} }); var mockGameRepo = new Mock(); { new Game { HomeTeam = "Montreal Canadiens", AwayTeam = "Toronto Maple Leafs", Date = DateTime.Today}, new Game { HomeTeam = "Calgary Flames", AwayTeam = "Vancouver Canucks", Date = DateTime.Today}, new Game { HomeTeam = "Los Angeles Kings", AwayTeam = "Anaheim Ducks", Date = DateTime.Today}, }); var controller = new HomeController(mockPlayerRepo.Object); var result = controller.Index(mockGameRepo.Object); var viewResult = Assert.IsType(result); var model = Assert.IsAssignableFrom(viewResult.ViewData.Model); Assert.Equal(2, model.Players.Count); Assert.Equal(3, model.Games.Count); }

Không có gì khác biệt hơn khi chúng ta test TeamStatCalculator. Chúng ta cũng vẫn dùng “AAA” và mock vài thành phần phụ thuộc cần có cho controller này như PlayerRepository hay GameRepository, inject chúng vào controller sau đó gọi hàm Index(). Sự khác nhau lớn nhất là phần assert nơi chúng ta kiểm tra ViewResult và model để chắc chắn là nó trả về kết quả đúng. Hơn nữa, đảm bảo rằng controller cũng được test.

Tóm lại

Ok vậy là chúng ta đã tìm hiểu về Unit test trong .NET Core thông qua ví dụ, chúng ta thấy rằng việc viết unit test rất quan trọng và quan trọng hơn là code của chúng ta phải có IoC và DI để hỗ trợ việc test. Nó giúp ứng dụng của chúng ta tăng chất lượng code giảm rủi ro khi thay đổi và giảm effort test lại khi có thay đổi.

Những lợi ích này là không thể phủ nhận, để các bạn nắm rõ hơn về unit test trong dự án thực tế các bạn có thể tham gia khóa học Kỹ thuật Unit test cho .NET Developer tại TEDU

Tác giả: Bạch Ngọc Toàn

Chú ý: Tất cả các bài viết trên chúng tôi đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.

Tìm Hiểu Về Jestjs, Viết Unit Test Cho Javascript

Jestjs là một JavaScript Testing Framework khá là dễ sử dụng và cài đặt, tuy nhiên vẫn đầy đủ tính năng để bạn có thể sử dụng Bài viết này mình xin giới thiệu một số tính năng cơ bản của jest cùng với một số ví dụ.

Cài đặt

Cài đặt Jest khá đơn giản:

yarn add --dev jest

hoặc

npm install --save-dev jest

Sau đó thêm đoạn code sau vào file package.json:

Tiếp theo mình có ví dụ một file test: math.js

Để viết test cho file trên mình tạo file test/math.test.js, đuôi file là chúng tôi sẽ nói cho jest biết đây là file test của bạn.

Sau đó chạy yarn test hoặc npm run test.

Ở trong đoạn code trên:

expect(MathJS.sum(1, 1)).toBe(2);

.toBe() chính là một matcher trong jest. Nó giống như phép so sánh bằng bình thường vậy. Ví dụ:

expect(result).toBe(2); expect(result).toBe(true); expect(result).toBe({a: 1, b: 2});

Tuy nhiên khi so sánh một Object bạn nên sử dụng .toEqual() Lý do là vì.toBe thực tế sử dụng === để so sánh và đưa ra kết quả. Và chúng ta đều biết trong javascript:

Còn .toEqual() theo như Jest sẽ lần lượt kiểm tra tất các trường của Object, hoặc mảng để so sánh. Vì vậy thay vì viết:

expect(result).toBe({a: 1, b: 2});

Hãy viết:

expect(result).toEqual({a: 1, b: 2});

Ngoài ra còn các matchers khác:

Truthiness

toBeNull so sánh với giá trị null.

toBeUndefined so sánh với giá trị undefined.

toBeDefined là hàm cho kết quả ngược lại toBeUndefined.

toBeTruthy so sánh với giá trị true.

toBeFalsy so sánh với giá trị false.

Numbers

Đối với số thập phân, bạn nên sử dụng toBeCloseTo:

String

Bạn có thể kiểm tra một đoạn văn bản với regular expressions bằng toMatch:

Array

Để kiểm tra giá trị có trong một mảng, bạn có thể dùng toContain:

Exceptions

Để kiểm tra một lỗi có thể xảy ra bạn có thể sử dụng toThrow:

Test một action trong redux

Test một event trong Jquery

Bạn có thể thấy const alert = jest.fn();. Đây là một tính năng trong Jest giúp bạn mock một function. Hay mô phỏng lại hàm cần test.

Test với module axios

Trong ví dụ này mình đã mock module axios, và đặt giá trị trả về cho hàm get. Như vậy khi test bạn sẽ không cần phải gửi request thật, tránh mất thời gian. Các module khác bạn cũng có thể làm cách tương tự.

All Rights Reserved

Unit Test Là Gì? Giới Thiệu Về Unit Test Và Ví Dụ

Lời nói đầu.

Dành cho các bạn lười biếng =]]. Nêú các bạn không muốn đọc lý thuyết thì scroll xuống để xem ví dụ về cách viết unit test và hãy xem mình là ở vị trí nào?

Bất cứ ai đã tham gia vào vòng đời phát triển phần mềm dù ít hay nhiều kinh nghiệm đều cũng đã từng nghe tới Unit Test. Unit Test là một cơ chế chấp nhận để khám phá phần mềm hoạt động tốt như thế nào theo các yêu cầu được chỉ định. Mặc dù mục đích của kiểm tra là tìm ra các lỗi, nhưng nó không thể đảm bảo sự vắng mặt của các lỗi khác, bất kể các trường hợp kiểm thử đã được thiết kế sáng tạo như thế nào.

Có nhiều công ty không quan trọng vấn đề này nhưng nếu Công TY bạn bắt buộc nghiêm ngặt vấn đề này thì tôi tin và tôi viết vị trí của bạn đang ở đâu. Một lập trình viên lúc nào cũng cận thẩn trong việc code thì lúc nào cũng phải có test case.

Tham gia cùng chúng tôi:

Facebook: Cộng đồng lập trình javascript

Facebook Cộng đồng giới thiệu bài viết, website, sản phẩm tăng traffic.

Bài viết này sẽ cung cấp cho bạn những điều sau đây:

Unit Test là gì?

Unit Test có cần thiết không?

Unit Test có nhược điểm gì?

Viết Unit Test thông qua ví dụ.

#Unit Test là gì?

Bản thân bài kiểm tra đơn vị là một đoạn mã ngắn hoặc đoạn mã được thiết kế để xác minh hành vi của một đơn vị cụ thể để tạo ra kết quả vượt qua hoặc thất bại. Mục đích của thử nghiệm đơn vị là cho phép các nhà phát triển chạy càng nhiều thử nghiệm đơn vị càng tốt để xác định các lỗ hổng tiềm năng. Khi ứng dụng đã vượt qua thử nghiệm đơn vị, các hình thức thử nghiệm khác sau đó sẽ cần được áp dụng để xác nhận thêm.

#Unit Test có cần thiết không?

Câu trả lời đương nhiên là cần thiết với một Lập Trình Viên có trách nhiệm với những dòng code của chính bản thân mình.

1 – Phát triển nhanh hơn.

Một khi các devloper viết các test case thì việc gỡ bug sẽ ít dành thời gian hơn và sau đó sẽ tự tin hơn về việc thực hiện các thay đổi code. Những kỹ năng về mọi mặt sẽ phát triển nhanh hơn các Lập Trình Viên bình thường.

Tính cận thận và trách nhiệm trong những bài unit test cũng khẳng định ở bên ngoài cuộc sống của họ.

2 – Cấu trúc Code tốt hơn.

Khi các nhà phát triển viết unit tests, sự nhấn mạnh của họ là suy nghĩ về cách mã của họ sẽ được sử dụng trên toàn hệ thống, điều này thường dẫn đến thiết kế tốt hơn.

Và còn nhiều lợi ích khác như là giảm công việc cho các tester, giảm giá thành chi phí code, giúp giảm chi phí cho việc bảo trì trong tương lai…

#Unit Test có nhược điểm gì?

Mặc dù các lợi ích của Unit Test đang bắt đầu được hiểu rộng rãi hơn, nhưng vẫn còn một số lý do tại sao nó không được áp dụng đầy đủ hơn, điều này khiến tiềm năng của nó không được thực hiện.

1 – Không có thời gian cho Unit Test.

Viết Unit Test là tốn thời gian đó là lý do tại sao rất khó để đáp ứng thời hạn. Trong thực tế, Unit Test có thể tiết kiệm rất nhiều thời gian và nỗ lực phát triển trong thời gian dài.

2 – Unit tests khác với viết code

Đúng, bạn hãy nghĩ rằng để viết được một unit test đôi khi còn mất thời gian hơn viết một chức năng code. Và có thể có những Lập Trình Viên viết được code nhưng chưa chắc viết được test case. Không có gì đảm bảo, ngay cả khi mã được kiểm tra kỹ lưỡng, sẽ không có lỗi.

#Viết Unit Test thông qua ví dụ

Bây giờ mình sẽ làm một bài tập nho nhỏ cho các bạn hiểu về cách thức viết một unit test như thế nào?

Mình sẽ lấy bài toàn Viết hoa chữ cái đầu tiên của mỗi từ trong Câu trong bài Sự Khác Biệt Về Kinh Nghiệm Trong Lập Trình Javascript để làm ví dụ:

Sử dụng reduce() làm tăng hiệu quả và điều quan tâm là hiệu suất. Giải pháp dùng reduce() and map().

const rest = word.slice(1); const firstLtr = word.charAt(0); return firstLtr.toUpperCase() + rest.toLowerCase(); } if(!phrase) return phrase; [first, …rest] = phrase.split(‘ ‘); capitalize(first)) } Unit Test:

Tôi đã viết một hàm trợ giúp khẳng định và một số trường hợp thử nghiệm. Đây không phải là một bài kiểm tra toàn diện

return fun(input) === expected ? ‘passed’ : `failed on input=${input}. expected ${expected}, but got ${fun(input)}`; } Test cases:

let testCases = [ {input: "I'm a little tea pot", expected: "I'm A Little Tea Pot"}, {input: "sHoRt AnD sToUt", expected: "Short And Stout"}, {input: "sHoRt AnD sToUt", expected: "Short And Stout"}, {input: "tôi là một lập trình viên javascript", expected: "Tôi Là Một Lập Trình Viên Javascript"}, {input: "HERE IS MY HANDLE HERE IS MY SPOUT", expected: "Here Is My Handle Here Is My Spout"}, {input: "", expected: ""}, {input: undefined, expected: undefined}, ]

Làm bài kiểm tra này, bạn sẽ vượt qua tất cả các bài kiểm tra:

console.log(testResult); output: 0: “passed” 1: “passed” 2: “passed” 3: “passed” 4: “passed” 5: “passed”

#Kết Luận

Tham gia cùng chúng tôi:

Facebook: Cộng đồng lập trình javascript

Facebook Cộng đồng giới thiệu bài viết, website, sản phẩm tăng traffic.

Tham khảo tại:

https://www.guru99.com/unit-testing-guide.html https://areknawo.com/lets-talk-js-unit-testing/ https://blog.testlodge.com/what-is-unit-testing/

Hướng Dẫn Viết Unit Test Trong Angular

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

frameworks: đây là nơi jasmine được set là framework để testing, nếu bạn muốn dùng 1 framework khác thì có thể điền vào đây.

autoWatch: nếu nó được set là true, test sẽ chạy chế độ watch mode, có nghĩa là mỗi khi bạn thay đổi bất cứ dòng code nào trong file test và lưu lại, nó sẽ tự động build lại và chạy lại.

browsers: đây là nơi để set trình duyệt và test sẽ chạy, mặc định sẽ là Chrome, nhưng bạn có thể sử dụng trình duyệt khác bằng cách khai báo ở đây.

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 submittedlà 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ạn đang xem bài viết Tìm Hiểu Unit Testing Trongcore trên website Toiyeucogaihalan.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung 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!