Используя Jest и Enzyme, как проверить функцию, переданную через реквизит? - PullRequest
0 голосов
/ 11 декабря 2018

Используя Jest и Enzyme, как я могу проверить, был ли запущен this.props.functionToTest?

class TestComponent extends Component {
   static propTypes = {
     functionToTest: PropTypes.func
   }
   componentDidMount() {
     this.props.functionToTest()
   }
}

В Jest я попытался создать mockProps и передать их при монтировании компонента.

let props = {
  functionToTest = jest.fn(() => {});
}
beforeEach(() => {
  const wrapper = mount(<TestComponent {...props} />
}

Файл console.log в функции componentDidMount показывает functionToTest как неопределенное.Очевидно, что передача реквизита во время монтирования не работает.

Вопрос 1: Как я могу передать макеты реквизита, которые будут отображаться в функции componentDidMount?

Вопрос 2: Как только эта функция станет доступнойКак получить доступ к функции, чтобы я мог использовать spyOn или что-то подобное, чтобы проверить, была ли функция запущена?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Проблема закончилась тем, что TestComponent экспортировался только в оболочку Redux.Добавление экспорта на уровне класса и его деструктуризация в импорте Jest test вместе с решением, опубликованным Хенриком выше, исправили его.

0 голосов
/ 11 декабря 2018

Я не знаю ваших точных настроек, но вот как бы я это сделал:

  • Смоделируйте функцию с помощью jest.fn(), как вы это сделали
  • Передайте макет вмонтируемый компонент (как вы, очевидно, и сделали)
  • Проверьте, был ли он запущен с expect(...).toBeCalled() или .toHaveBeenCalled() (зависит от версии Jest)

.

let props = {
  functionToTest: jest.fn() // You don't need to define the implementation if it's empty
};

beforeEach(() => {
  const wrapper = mount(<TestComponent {...props} />
}

// In the test code:
it('does something', () => {
    expect(props.functionToTest).toBeCalled();
    // OR... depending on your version of Jest
    expect(props.functionToTest).toHaveBeenCalled();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...