Вот решение для модульного теста:
swipe.js
:
import $ from 'jquery';
export default class swipe {
constructor() {
this.init();
}
init() {
this.postRender();
}
postRender() {
$(document).ready(() => {
$('#buttonID').on('click', () => {
$('#navigation').addClass('blue');
});
});
}
}
swipe.test.js
:
import Swipe from './swipe';
import $ from 'jquery';
jest.mock(
'jquery',
() => {
const m$ = { on: jest.fn(), ready: jest.fn(), addClass: jest.fn() };
return jest.fn(() => m$);
},
// remove this option if you have installed jquery module
{ virtual: true },
);
describe('60190274', () => {
it('should add class when click the button', () => {
$().ready.mockImplementationOnce((callback) => callback());
$().on.mockImplementationOnce((event, handler) => handler());
new Swipe();
expect($).toBeCalledWith(document);
expect($).toBeCalledWith('#buttonID');
expect($).toBeCalledWith('#navigation');
expect($().ready).toBeCalled();
expect($().on).toBeCalledWith('click', expect.any(Function));
expect($().addClass).toBeCalledWith('blue');
});
});
Результаты модульного теста со 100% покрытием:
PASS stackoverflow/60190274/swipe.test.js
60190274
✓ should add class when click the button (6ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
swipe.js | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 4.163s, estimated 5s
исходный код: https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/60190274