не уверен, поможет ли это, но может дать вам идеи.
во-первых, пример выше:
// this needs to be stubbed
// const childFunction = () => 'something';
const childFunction = jest.fn();
const parentFunction = () => childFunction();
it('childFunction should be called', () => {
parentFunction();
expect(childFunction).toHaveBeenCalled();
}
это несколько надуманный пример, поскольку маловероятно, что childFunction
экспортируется, поэтому вы не можете получить ссылку на него и смоделировать / заглушки.
один обходной путь, который у вас есть, состоит в том, чтобы переместить его в собственный метод
class Component extends React.Component {
componentDidMount() {
this.parentFunction();
}
parentFunction() {
parentFunction(); // from elsewhere
}
render() {...}
}
Это позволяет вам создать прокол и шпионить за компонентом прото.
например
const spy = jest.spyOn(Component.prototype, 'parentFunction');
// ... mount so lifecycle runs...
expect(spy).toHaveBeenCalled(); // and clear the spy mocks after!
может быть лучше смоделировать модуль
например, у вас есть utils.js, используемый вашим компонентом, который:
export function parentFunction(){ console.log('parent'); }
component.js делает:
import { parentFunction } from './utils';
вы можете сделать в своих тестах:
const utils = require('./utils');
utils.parentFunction = jest.fn();
import Component from './component';
// later
expect(utils.parentFunction).toHaveBeenCalled();
, как вы можете видеть, много возможных путей, хотя я не уверен в ценности этого теста, вы должнывозможно, проверяется вывод / функциональность компонента, а не того, что он вызывал, запуск чего-либо на componentDidMount
- это само собой разумеющееся, и он сломается, только если кто-то преобразуется в функционал или изменит имя жизненного цикла.