Enzyme Button Имитация не запускает функцию onPress - PullRequest
0 голосов
/ 31 марта 2020

В настоящее время пытаюсь проверить, была ли вызвана кнопка «onPress» после ее нажатия, но у меня возникли некоторые проблемы. В моем fires onPress function when button is clicked тестовом примере в SignUp.test.js он может найти кнопку и все, но когда симуляция клика, он говорит:

Sign Up Page › fires onPress function when button is clicked

    expect(jest.fn()).toHaveBeenCalled()

    Expected number of calls: >= 1
    Received number of calls:    0

      28 |     // wrapper.find('#navigate').prop('onPress')();
      29 |     wrapper.find('#navigate').at(0).simulate('click');
    > 30 |     expect(onPress).toHaveBeenCalled();
         |                     ^
      31 |   });
      32 | });
      33 |

Вот мой код, чтобы помочь:

SignUp. js

const SignUp = ({ navigation }) => {
  const navigateOnPress = () => navigation.navigate('SignIn');

  return (
    <View style={Styles.container}>
      <Text>SignUp</Text>
      <Button
        id="navigate"
        title="Press me"
        onPress={navigateOnPress}
      />
    </View>
  );
};

SignUp.test. js

import React from 'react';
import { shallow } from 'enzyme';

import SignUp from '../../../components/SignUp/SignUp';

describe('Sign Up Page', () => {
  function render(args) {
    const defaultProps = {
      navigation: {
        navigate: jest.fn(),
      },
    };

    const props = {
      ...defaultProps, ...args,
    };

    return shallow(<SignUp {...props} />);
  }
  it('renders the sign up page', () => {
    const wrapper = render();
    expect(wrapper).toMatchSnapshot();
  });

  it('fires onPress function when button is clicked', () => {
    const wrapper = render();
    const onPress = jest.fn();
    wrapper.find('#navigate').prop('onPress')();
    wrapper.find('#navigate').at(0).simulate('click');
    expect(onPress).toHaveBeenCalled();
  });
});

1 Ответ

0 голосов
/ 31 марта 2020

Решается путем непосредственного вызова onPress prop и проверки вызова функции, переданной в указанный prop.

  it('fires onPress function when button is clicked', () => {
    const navigateToNextPage = jest.fn();
    const props = {
      navigation: {
        navigate: navigateToNextPage,
      },
    };
    const wrapper = shallow(<SignUp {...props} />);
    wrapper.find('#navigate').first().props().onPress();
    expect(navigateToNextPage).toHaveBeenCalledTimes(1);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...