来最後几天我们又跳回去React-Testing-Library XDDD
相信还是有很多公司使用redux来当作global store来使用,因此最後几天我们来聊聊redux如何使用RTL来做单元测试.
那接下来写一个非常简单的reducer
const SET_NAME = 'SET_NAME';
const initialState = {
name: ''
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case SET_NAME:
return {
name: 'stan'
}
default:
return state;
}
}
再来一个非常简单的component
import { useSelector, useDispatch } from 'react-redux';
const Avatar = () => {
const name = useSelector(strate => state.name);
const dispatch = useDispatch();
const handleChangeName = () => dispatch({type: 'SET_NAME' })
return (
<>
<div data-testid="name">
{name}
</div>
<button onClick={handleChangeName}>submit</button>
</>
)
}
再来就是一个简单的test case
import { render } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { Provider } from 'react-redux';
import store from './store';
import Avatar from '....';
test('render component with redux', () => {
const { getByTestId, getByText } = render(
<Provider store={store}>
<Avatar />
</Provider>
);
const elem = getByText(/submit/i)
userEvent.click(elem);
expect(getByTestId('name')).toHaveTextContent('stan')
})
这样就可以做一个简单的redux整体流程的测试,谢谢大家
<<: [ Day 27 ] - 样板字面值(Template literals)
>>: 成为工具人应有的工具包-27 ShellMenuView
链结串列(Linked List)建立的方法 append: 在尾部新增节点 insertAt: 在...
介绍 简单来说使用自动布局可能就是为了适配不同 iPhone 机型所发展的一个方法或框架? 总之我觉...
可以透过String.xml来新增Spinner内的清单列表 另外一种可以透过MainActivit...
表格 (table) 表格是一个由列和栏组成的结构化资料(tabular data)。表格能帮助你快...
年龄这件无关紧要的小事 从小我就很讨厌任何因为年纪而设下的规范 尊重长辈绝对是因为他做人处事很值得...