
const { closeSnackbar } = useSnackbar();
...
const handleOnClick = () => {
closeSnackbar();
onClick();
};
return (
<Button
variant="contained"
size="small"
data-test-id="FooterButton"
disabled={disabled}
className={style}
onClick={handleOnClick}
>
{icon}
{label}
</Button>
);
import React from 'react';
import { mount } from 'enzyme';
import { act } from 'react-dom/test-utils';
import Button from '@material-ui/core/Button';
// import footerButtonHandleOnClick from 'utils/footerButtonHandleOnClick';
import i18next from '../../config/i18n';
import FooterButton from './FooterButton.component';
jest.mock('notistack', () => ({
useSnackbar: jest.fn().mockReturnValue({ closeSnackbar: () => { } }),
}));
jest.mock('utils/footerButtonHandleOnClick');
describe('Foote Button', () => {
let props;
beforeEach(() => {
props = {
i18next,
label: 'test',
type: 'positive',
onClick: () => {},
};
});
it('should simulate FooterButton click', async () => {
let component;
await act(async () => {
component = mount(<FooterButton {...props} />);
component.update();
component.find(Button).filter({ 'data-test-id': 'FooterButton' }).simulate('click');
});
expect(useSnackbar.closeSnackbar()).toHaveBeenCalled();
});
});
You need to mock the closeSnackbar function, something like this:
const mockCloseSnackbar = jest.fn();
jest.mock('notistack', () => ({
useSnackbar: jest
.fn()
.mockImplementation(() => ({ closeSnackbar: mockCloseSnackbar }))
}));
Then, your assert would be this:
expect(mockCloseSnackbar).toHaveBeenCalled();
Most helpful comment
You need to mock the
closeSnackbarfunction, something like this:Then, your assert would be this:
expect(mockCloseSnackbar).toHaveBeenCalled();