React Unit Test Tools

Chào các bạn, đến hẹn lại lên, hôm nay mình xin phép chia sẻ 1 chút về unit test :v 1 trong những thứ mình đã né tránh bao năm qua nhưng không thoát React Unit Test Tools Unit Test của React Component có một chút khác biệt, thay vì xác minh đầu ra của

Chào các bạn, đến hẹn lại lên, hôm nay mình xin phép chia sẻ 1 chút về unit test :v 1 trong những thứ mình đã né tránh bao năm qua nhưng không thoát

React Unit Test Tools

Unit Test của React Component có một chút khác biệt, thay vì xác minh đầu ra của các functions, Unit Test của React yêu cầu 4 mục đích kiểm tra đặt biệt:

  • Testing basic component rendering.
  • Testing props.
  • Testing events.
  • Testing event handlers.

Có hai tùy chọn công cụ phổ biến nhất là Jest và Enzyme.

jest

Jest là một trình chạy thử nghiệm JavaScript được duy trì bởi Facebook. Bao gồm performance, mocking, snapshot, code coverage, sandbox.


Khi sử dụng Jest để kiểm tra ứng dụng React hoặc React Native, bạn có thể viết một bài kiểm tra snapshot sẽ lưu kết quả đầu ra của một thành phần được kết xuất vào tập tin và so sánh đầu ra của thành phần với snapshot trong các lần chạy tiếp theo. Điều này rất hữu ích trong việc biết khi nào thành phần của bạn thay đổi hành vi của nó.


Xem thêm về jest tại : đây

Enzyme

Enzyme là một thư viện bao bọc các gói như React TestUtils, JSDOM và CheerIO để tạo ra một giao diện đơn giản hơn để viết Unit Test.


Xem thêm về enzyme tại : đây

Should know

1. Xác minh giá trị của state/proprs trong một component

const wrapper =shallow(<ComponentName />);expect(wrapper.state().data).toBe('something');expect(wrapper.props().data).toBe('something');

2. Xác minh giá trị của thẻ trong một component

const wrapper =shallow(<ComponentName />);expect(wrapper.find('h4').length).toBe(1);expect(wrapper.find('h4').at(0).text()).toBe('Something');

3. Mô phỏng sự kiện nhấn nút

const wrapper =shallow(<ComponentName />);expect(wrapper.state().data).toBe('state1');
wrapper.find('button').simulate('click');expect(wrapper.state().data).toBe('state2');-----

## Trick
### Xác nhận style
wrapper.find('.myClassname').get(0).style;expect(containerStyle).to.have.property('opacity','1');
### Xác nhận classnameconst span =mount(<Test />).find('span');expect(span.html().match(/style="([^"]*)"/i)[1]).toBe('color: #000;');
## Remark
### Shallow Rendering
Kiểm tra một component như một unit.import{ shallow }from'enzyme';const wrapper =shallow(<MyComponent />);

Full Rendering

Các component có thể tương tác với API DOM hoặc có thể yêu cầu đầy đủ lifecycle để kiểm tra đầy đủ component.

import{ mount }from'enzyme';const wrapper =mount(<MyComponent />);

Static Rendering

Nó được sử dụng để render components với HTML tĩnh và phân tích kết quả cấu trúc HTML.

import{ render }from'enzyme';const wrapper =render(<MyComponent />);

Example

Install

$ git clone https://github.com/wahengchang/react-test-must-know

$ npm install

Run Tests

$ npm test

> jest
PASS  src/__tests__/simpleFoo-test.js
PASS  src/__tests__/Foo-test.js
Test Summary
› Ran all tests.
› 7 tests passed (7 total in 2 test suites, run time 1.37s)

-----
-----

Nguồn tham khảo: https://hackernoon.com/react-unit-test-example-tutorial-jest-enzyme-jsdom-mocha-chai-state-props-component-7ec850a98566

Nguồn: viblo.asia

Bài viết liên quan

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con

Khi nào nên dùng main, section, article, header, footer, và aside trong HTML5

HTML5 đã giới thiệu các thẻ ngữ nghĩa giúp cấu trúc nội dung web một cách có

So sánh Webhook và API: Khi nào nên sử dụng?

Trong lĩnh vực công nghệ thông tin và phát triển phần mềm, Webhook và API là hai th