Для меня макет window.scrollTo
в каждом тестовом случае. Или поместите фиктивный код в файл window.setup.js
и добавьте путь этого файла в конфигурацию jest setupFiles
, оба эти способа работают нормально.
Например,
index.spec.tsx
:
import React, { Component } from 'react';
class SomeComponent extends Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick(e) {
e.preventDefault();
window.scrollTo(0, 0);
}
render() {
return (
<div>
<button onClick={this.handleClick}>Click Me!</button>
</div>
);
}
}
export default SomeComponent;
index.spec.tsx
, макет window.scrollTo
в каждом тестовом случае.
import React from 'react';
import { shallow } from 'enzyme';
import SomeComponent from './';
describe('SomeComponent', () => {
test('should handle click', () => {
const wrapper = shallow(<SomeComponent></SomeComponent>);
const mEvent = { preventDefault: jest.fn() };
window.scrollTo = jest.fn();
wrapper.find('button').simulate('click', mEvent);
expect(mEvent.preventDefault).toBeCalled();
expect(window.scrollTo).toBeCalledWith(0, 0);
});
});
jest.config.js
:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'enzyme',
// setupFiles: ['/Users/ldu020/workspace/github.com/mrdulin/jest-codelab/src/stackoverflow/58585527/window.setup.js'],
setupFilesAfterEnv: ['jest-enzyme'],
testEnvironmentOptions: {
enzymeAdapter: 'react16'
},
coverageReporters: ['json', 'text', 'lcov', 'clover']
};
Результат модульного теста:
PASS src/stackoverflow/58585527/index.spec.tsx (6.114s)
SomeComponent
✓ should handle click (12ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 6.947s
Или создайте файл window.setup.js
и укажите путь к файлу в jest setupFiles
:
window.setup.js
:
window.scrollTo = jest.fn();
jest.config.js
:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'enzyme',
setupFiles: ['/Users/ldu020/workspace/github.com/mrdulin/jest-codelab/src/stackoverflow/58585527/window.setup.js'],
setupFilesAfterEnv: ['jest-enzyme'],
testEnvironmentOptions: {
enzymeAdapter: 'react16'
},
coverageReporters: ['json', 'text', 'lcov', 'clover']
};
Результат модульного теста:
PASS src/stackoverflow/58585527/index.spec.tsx
SomeComponent
✓ should handle click (12ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 3.33s, estimated 7s
Оба они работают нормально.
Исходный код: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58585527