【发布时间】:2018-04-23 04:22:28
【问题描述】:
我正在尝试对我的 reactJS 组件中的异步函数进行一些酶/开玩笑单元测试,该函数作为 prop 注入。
我的问题是测试函数的then() 部分中的值,如果发生错误,则测试catch()。
我的组件 (<CreateAccount />) 的功能如下所示:
_onSubmit = (event) => {
event.preventDefault()
const { username, password } = this.state
this.props.createUserMutation({
variables: { username, password }
}).then(response => {
const token = response.data.createUser.token
if (token) {
Cookies.set('auth-token', token, { expires: 1 })
}
}).catch(error => {
console.warn(error)
})
}
第一个测试应该检查.catch(error => {}),因为数据未定义:
it('_onSubmit() should throw error if data is missing', () => {
const createUserMutation = () => {
return Promise.resolve({})
}
const wrapper = shallow(<CreateAccount createUserMutation={createUserMutation} />)
wrapper.update().find(Form).simulate('submit', {
preventDefault: () => {}
})
const state = wrapper.instance().state
expect(wrapper).toThrow() // <-- How to do it correctly?
})
第二个测试应该检查cookie是否设置正确。在这里我不知道该怎么做?我想我必须嘲笑Cookie
it('_onSubmit() should get token', () => {
const createUserMutation = () => {
return Promise.resolve({
data: {
createUser: { token: 'token' }
}
})
}
const wrapper = shallow(<CreateAccount createUserMutation={createUserMutation} />)
wrapper.find(Form).simulate('submit', {
preventDefault: () => {}
})
// How to check for token value and Cookies?
})
【问题讨论】:
标签: javascript reactjs unit-testing asynchronous enzyme