Jest сообщает, что метод из компонента, очищенного от фермента, не был вызван в componentDidMount - PullRequest
0 голосов
/ 25 января 2019

Итак, у меня есть общий компонент класса:

import React, { Component } from "react";

export default class CompTest extends Component {
  someFunc() {}

  componentDidMount() {
    this.someFunc();
  }

  render() {
    return <div>Hey</div>;
  }
}

и я хочу проверить, что someFunc вызывается хотя бы один раз (внутри componentDidMount)

describe("<CompTest /> componendDidMount", () => {
  it("should call someFun()", () => {
    const wrapper = shallow(<CompTest />);
    const instance = instance();
    jest.spyOn(instance, "someFun");

    expect(instance.someFunc).toHaveBeenCalledTimes(1);
  });
});

однако я получаю: Expected mock function to have been called one time, but it was called zero times.

По данным энзима v3 docs: As of Enzyme v3, the shallow API does call React lifecycle methods such as componentDidMount and componentDidUpdate.

Что не так с моим тестом? Спасибо.

1 Ответ

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

(энзимант здесь)

Проблема в том, что вы следите за методом someFunc после того, как оригинал уже был передан в дерево рендеринга. Попробуйте это:

describe("<CompTest /> componendDidMount", () => {
  it("should call someFun()", () => {
    jest.spyOn(CompTest.prototype, 'someFunc');
    const wrapper = shallow(<CompTest />);

    expect(wrapper.instance().someFunc).toHaveBeenCalledTimes(1);
  });
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...