jest.fn () вызывается несколько раз - PullRequest
0 голосов
/ 28 января 2019

Я тестирую свои реактивные компоненты приложения с шуткой и энзимом.Для того, чтобы шпионить за функциями, переданными в качестве реквизита, я использую 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 раза.

1 Ответ

0 голосов
/ 28 января 2019

Извлеките wrapper.prop('navigate') из функции beforeEach()

Ваш beforeEach() работает столько раз, сколько it() у вас есть

...