gpt4 book ai didi

javascript - 您将如何在 Alert 中模拟 'onPress'?

转载 作者:可可西里 更新时间:2023-11-01 02:19:12 24 4
gpt4 key购买 nike

我可以模拟 Alert 来测试它的 alert 方法是否被调用,但我真正想要测试的是按下 alert 中的 ok 按钮。

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>
)
}
}

有人试过吗?

最佳答案

我会模拟模块并将其导入以测试 spy 。然后触发点击事件。这将称为 spy 。从 spy 中,您可以使用 mock.calls 获取调用它的参数获取 onPress 方法并调用它。然后您可以测试组件的状态。

import Alert from 'Alert'

jest.mock('Alert', () => {
return {
alert: jest.fn()
}
});


it('Mocking Alert', () => {
const wrapper = shallow(<Search />);
wrapper.findWhere(n => n.props().title == 'Submit').simulate('Press');
expect(Alert.alert).toHaveBeenCalled(); // passes
Alert.alert.mock.calls[0][2][0].onPress() // trigger the function within the array
expect(wrapper.state('someState')).toBe(true)
})

关于javascript - 您将如何在 Alert 中模拟 'onPress'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com