gpt4 book ai didi

javascript - 在 react-native 中测试 TextInput 组件

转载 作者:行者123 更新时间:2023-11-30 14:27:11 25 4
gpt4 key购买 nike

我在使用 jestenzyme 测试 react-native 中的 TextInput 更改时遇到了一些问题。

我处理用户输入的组件基本上是这样的(简化):

class Search extends React.PureComponent {
onSearchTextChange = input => {
// do something awesome
};
render() {
return (
<View>
<TextInput
onChangeText={debounce(this.onSearchTextChange, 800)}
/>
</View>
);
}
}

我想测试文本输入行为。这是测试现在的样子:

it('should render a text input and react to user input', done => {
const mockOnSearchTextChange = jest.fn();
Search.prototype.onSearchTextChange = mockOnSearchTextChange;

const tree = shallow(<Search />);
const textInput = tree.find('TextInput');
expect(textInput).toHaveLength(1);
textInput.simulate('changeText', { target: { value: 'test' } });
expect(mockOnSearchTextChange).not.toHaveBeenCalled();
setTimeout(() => {
expect(mockOnSearchTextChange).toHaveBeenCalledWith('test');
done();
}, 1500);
});

运行这个测试时,我收到这个错误信息

Expected mock function to have been called with: ["test"]

But it was not called.

所以模拟函数永远不会按预期调用。我错过了什么?

最佳答案

无需添加其他库。 Jest 和 Enzyme 可以执行所需的测试。下面是 SearchBar 组件的定义,它接收一个函数作为 prop。使用键入的文本调用该函数。

const SearchBar = ({onSearch}) => {
return (
<View>
<TextInput
onChangeText={text => onSearch(text)}
/>
</View>
);
};

可以进行如下测试

    const onSearch = jest.fn();
const wrapper = shallow(<SearchBar onSearch={onSearch} />);
wrapper.find('TextInput').simulate('changeText', 'test search text');
expect(onSearch).toHaveBeenCalledWith('test search text');

关于javascript - 在 react-native 中测试 TextInput 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51750611/

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