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

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 2

viết lại nội dung này ” Phát hiện các cuộc tấn công Cross Site Scripting (XSS)

AI Chatbot 2025: Xu Hướng Tất Yếu Cho Doanh Nghiệp Dẫn Đầu

Giới thiệu AI chatbots đã trải qua một hành trình đáng kể, từ những công cụ t

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 1

Tấn công web là gì? Ứng dụng web là các ứng dụng cung cấp dịch vụ cho người

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp Trong kỷ nguyên s