所以这个问题比我想象的要复杂得多。
既然你想在这里测试的是dismiss() 和show() 基本上是一个键盘,对吧?
因此,0.63 和 0.62 文档中的事件和侦听器是 https://reactnative.dev/docs/keyboard#docsNav
useEffect(() => {
Keyboard.addListener("keyboardDidShow", _keyboardDidShow);
Keyboard.addListener("keyboardDidHide", _keyboardDidHide);
// cleanup function
return () => {
Keyboard.removeListener("keyboardDidShow", _keyboardDidShow);
Keyboard.removeListener("keyboardDidHide", _keyboardDidHide);
};
}, []);
const _keyboardDidShow = () => {
alert("Keyboard Shown");
};
const _keyboardDidHide = () => {
alert("Keyboard Hidden");
};
要让 Jest 调用 _keyboardDidShow 和 _keyboardDidHide 这两个函数,您需要使用 Keyboard.emit('keyboardDidShow')
例子:
it('Test Keyboards keyboardDidShow is called', () => {
const { getByTestId } = render(<Container />);
act(() => {
Keyboard.emit('keyboardDidShow', {});
});
const box = getByTestId('TEST');
//Do here your expect clauses to check if something changed in your container
});
不完全确定这是否会对任何人有所帮助。但这就是我解决这个难题的方法,以弄清楚如何覆盖 _keyboardDidShow 和 Hide
编辑:
对于 0.66 版 > 现在您需要执行以下操作:
useEffect(() => {
const kds = Keyboard.addListener("keyboardDidShow", _keyboardDidShow);
const kdh = Keyboard.addListener("keyboardDidHide", _keyboardDidHide);
// cleanup function
return () => {
kdh.remove();
kds.remove();
};
}, []);
const _keyboardDidShow = () => {
alert("Keyboard Shown");
};
const _keyboardDidHide = () => {
alert("Keyboard Hidden");
};
因为他们从现在开始改变了订阅事件的方式
对于测试,将 Keyboard.emit 更改为:
Keyboard._emitter.emit('keyboardDidShow', {});
Keyboard._emitter.emit('keyboardDidHide', {});
你应该拥有让它开玩笑工作所需的一切:)