Первый метод тестирования - это то, что определенно работает для меня, он быстро добавлен в тест, у меня работает банкомат, и это нормально:
it('adds the correct scroll blocking class to document.body', () => {
const spy = jest.spyOn(BlockUI.prototype, 'foo');
const instance = mount(<BlockUI />).instance();
// some suggest you need to do this but works without it.
// instance.forceUpdate();
const body = instance.document.body;
expect(body.className).toMatchSnapshot();
expect(spy).toHaveBeenCalled();
});
BlockUI.prototype.foo
добавляет ссылку на document.body
к экземпляру и добавляет к нему класс, который необходимо удалить при размонтировании.
Вышеуказанная настройка подходит для:
"enzyme": "3.7.0",
"enzyme-adapter-react-16": "1.7.1",
"enzyme-to-json": "3.3.4",
"jest": "23.6.0",
У меня были трудности с тем, чтобы это работало ранее без энзима или с более старыми версиями, но теперь все в порядке.
Существуют исключения с асинхронными вещами, которые могут вызвать проблемы - я предлагаю вместо использования шпиона проверять результат вызова метода, который вы хотите гарантировать, что бы это ни было. Методы жизненного цикла гарантированно будут вызваны, если не использовать неглубокий рендер в ферменте
Вы изменяете метод pan
в экземпляре в конструкторе, сохраняя его локальную связанную копию из прототипа - но он все равно должен вызывать прототип, и шпион должен его поймать. Я ожидаю, что вы на старых версиях чего-то.