【发布时间】:2020-05-25 00:02:07
【问题描述】:
只是好奇在这种情况下最佳策略是什么:
- 测试注销功能(带有注销按钮的标题)
-
当那个按钮被点击时,我
dispatch(Logout),这改变了我的redux reducer的状态:#action-creator.jsreturn { type: LOGOUT };#reducers.jscase LOGOUT: return { ...state, loggedin: false }
在我的Header 中,我基本上有以下内容:
const user_state = useSelector(state => state.user)
...
{ user_state.loggedin ? <button>Logout</button> : <button>Login</button> }
所以在我的测试中,除其他外,我想测试单击注销按钮时 UI 是否发生变化:
test('Can logout', () => {
let store = mockStore({
user: {
loggedin: true // simulate logged in state to display "Logout"
}
});
const { getByText } = render(<Provider store={store}><Header/>.
</Provider>);
fireEvent.click(getByText('Logout'))
// ????
});
理想情况下,我想测试expect(getByText("Login")).toBeTruthy();,但显然,我的模拟状态不会改变......我是否应该使用真实存储初始化测试,然后以某种方式更新它,以便当fireEvent 被触发时,状态实际更新并呈现登录按钮。
【问题讨论】:
标签: reactjs react-redux jestjs react-testing-library