Unit Test (Jest & enzyme)

Enzyme

http://airbnb.io/enzyme/

提供 React.js 相關的 Render 功能。

完整API文件 : https://airbnb.io/enzyme/docs/api/shallow.html

cheatSheet: https://devhints.io/enzyme

shallow, render, mount 差異

https://gist.github.com/fokusferit/e4558d384e4e9cab95d04e5f35d4f913

Snapshot testing

import React from 'react';
import { shallow, configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import test from '../index';

configure({ adapter: new Adapter() });
describe('<test />', () => {
  it('should render and match the snapshot', () => {
    const wrapper = shallow(<test />);
    expect(wrapper).toMatchSnapshot();
  });
});

Jest

類似Mocha,為一個跑測試的執行者

https://jestjs.io/docs/en/

jest.fn, jest.mock, jest.spyOn 差異

component Test

如果是包過compose 的話可以單獨把compoent export 然後傳給 test

action test

Reducer test

以下先安裝

下面會每次檔案更動都跑test

或是直接輸入jest跑一次test

如果沒有過所有測試,則不會產生snapshots

也可用react-test-renderer

Test coverage

使用如上指令會顯示目前測試覆蓋率。

可以打開coverage folder查看他生成的網頁:

上面會清楚的告訴你哪些部分還沒測試到

測試單一檔案

記得如果又加上了collectCoverageFrom那麼最後不會產生出 coverage file

通常只要在render的元素加上snapshot與所有事件上 (onClick...) 加上測試即可

如果沒有在所有Onclick事件加上測試,則會無法有100%覆蓋。

測試Function

Reset先前的function call可用

測試 Component Function

如果是 async function 則 test 也要 async

測試Module

https://jestjs.io/docs/en/mock-functions#mocking-modules

以及

取得 props

測component 不在 class 內的 function

Export 出來然後於 test 內呼叫即可

如果React children component 內的沒cover到

shallow 改為 mount 即可

點擊測試

find 可以找 id, class 或是 component

測試component 內 children的 prop

測試 defaultProp

Find 元素

注意:

  1. find(''#123") or find(".342") 數字開頭的都會出現錯誤

  2. 不管有沒有成功找到console.log都會顯示 ShallowWrapper {} 所以可以用.length來查看有沒有找到

設定 window 相關變數

設定所有有關window.<>

Hook UseEffect

Last updated

Was this helpful?