我可以模拟弹出警报来测试其alert方法是否被调用,但我真正想要测试的是按下警报中的确定按钮。
import { Alert } from 'react-native';
it('Mocking Alert', () => {
jest.mock('Alert', () => {
return {
alert: jest.fn()
}
};
});
const spy = jest.spyOn(Alert, 'alert');
const wrapper = shallow(<Search />);
wrapper.findWhere(n => n.props().title == 'Submit').simulate('Press');
expect(spy).toHaveBeenCalled(); //passes
})
我绝对不确定如何进行测试。这是一个通用组件,我想要测试它。
export default class Search extends Component{
state = {
someState: false
}
confirmSubmit(){
this.setState(state => ({someState: !state.someState}))
}
onPress = () => {
Alert.alert(
'Confirm',
'Are you sure?'
[{text: 'Ok', onPress: this.confirmSubmit}] //<-- want to test this
)
}
render(){
return(
<View>
<Button title='Submit' onPress={this.onPress}
</View>
)
}
}
有人尝试过这个吗?
Alert.alert( '确认', '你确定吗?' [{text: '好的', onPress: this.confirmSubmit}] //<-- 想要测试这个 )
- Anthony Urbinajest.fn()的值必须是模拟函数或间谍。`
- marcomock.calls[0]
)获取第三个参数([2]), 这是数组[{text: 'Ok', onPress: this.confirmSubmit}]
, 所以从中获取第一项([0])。 - Andreas KöberleAlert.alert.mock.calls[0][2][0].onPress()
出现编译时错误,例如Property 'mock' does not exist on type '(title: string, message?: string, buttons?: AlertButton[], options?: AlertOptions, type?: string) => void'.
,那么请使用Alert.alert['mock'].calls[0][2][0].onPress()
的表示法。 - Nar Gar