Unit Test (Jest & enzyme)
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,為一個跑測試的執行者
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 元素
注意:
find(''#123") or find(".342") 數字開頭的都會出現錯誤
不管有沒有成功找到console.log都會顯示 ShallowWrapper {} 所以可以用.length來查看有沒有找到
設定 window 相關變數
設定所有有關window.<>
Hook UseEffect
Last updated
Was this helpful?