Я тестирую свои реактивные компоненты приложения с шуткой и энзимом.Для того, чтобы шпионить за функциями, переданными в качестве реквизита, я использую jest.fn()
.Когда я запускаю тесты, я получаю сообщения об ошибках Expected mock function to have been called one time, but it was called two times
.Эта ошибка появляется при тестировании onPress
методов.
Я попытался удалить анонимные функции, которые вызывают методы prop в моих компонентах;прямая ссылка на onPress
метод <TouchableOpacity/>
внутри компонента без вызова его из свойства компонента;повторная визуализация тестового компонента перед тестовым набором.Но безуспешно.
/*BackButton.js*/
import React from 'react';
import { TouchableOpacity } from 'react-native';
import { Icon } from 'expo';
import { iconStyle, Colors } from '../constants';
const styles = {
icon: {
marginLeft: 5,
color: Colors.white,
fontSize: 40
}
};
function BackButton(props) {
return (
<TouchableOpacity
onPress={()=>props.navigate()}
style={{width: 50}}
>
<Icon.Ionicons
name={`${iconStyle}-refresh`}
style={styles.icon}
/>
</TouchableOpacity>
);
}
export default BackButton;
=======================================
/*BackButton-test.js*/
import 'react-native';
import React from 'react';
import {mount} from 'enzyme';
import BackButton from '../BackButton';
describe('navigate action', () => {
const spy = jest.fn();
const wrapper = mount(<BackButton navigate={spy}/>);
it('renders correctly', () => {
expect(wrapper).toMatchSnapshot();
});
beforeEach(() => {
wrapper.prop('navigate')();
});
it('calls once', () => {
expect(spy).toHaveBeenCalledTimes(1);
});
});
Более того, когда я непосредственно позвонил spy()
внутри beforeEach
, его также вызвали 2 раза.