78 lines
2.0 KiB
JavaScript
Executable File
78 lines
2.0 KiB
JavaScript
Executable File
import PropTypes from 'prop-types';
|
|
|
|
import { mergeConfig } from '@edx/frontend-platform';
|
|
|
|
import '@testing-library/jest-dom/extend-expect';
|
|
import 'babel-polyfill';
|
|
|
|
// mock methods which are not implemented in JSDOM:
|
|
// https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom
|
|
Object.defineProperty(window, 'matchMedia', {
|
|
writable: true,
|
|
value: jest.fn().mockImplementation(query => ({
|
|
matches: false,
|
|
media: query,
|
|
onchange: null,
|
|
addListener: jest.fn(), // deprecated
|
|
removeListener: jest.fn(), // deprecated
|
|
addEventListener: jest.fn(),
|
|
removeEventListener: jest.fn(),
|
|
dispatchEvent: jest.fn(),
|
|
})),
|
|
});
|
|
|
|
global.MathJax = {
|
|
typeset: jest.fn(callback => {
|
|
if (callback) { callback(); }
|
|
}),
|
|
startup: {
|
|
defaultPageReady: jest.fn(() => Promise.resolve()),
|
|
},
|
|
};
|
|
|
|
// Provides a mock editor component that functions like tinyMCE without the overhead
|
|
const MockEditor = ({
|
|
onBlur,
|
|
onEditorChange,
|
|
value,
|
|
}) => (
|
|
<textarea
|
|
data-testid="tinymce-editor"
|
|
value={value}
|
|
onChange={(event) => {
|
|
onEditorChange(event.currentTarget.value);
|
|
onBlur(event.currentTarget.value);
|
|
}}
|
|
onBlur={onBlur}
|
|
/>
|
|
);
|
|
MockEditor.propTypes = {
|
|
onBlur: PropTypes.func.isRequired,
|
|
onEditorChange: PropTypes.func.isRequired,
|
|
value: PropTypes.string.isRequired,
|
|
};
|
|
jest.mock('@tinymce/tinymce-react', () => {
|
|
const originalModule = jest.requireActual('@tinymce/tinymce-react');
|
|
return {
|
|
__esModule: true,
|
|
...originalModule,
|
|
Editor: MockEditor,
|
|
};
|
|
});
|
|
|
|
// Mock ResizeObserver since JSDOM doesn't provider an implementation.
|
|
global.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
observe: jest.fn(),
|
|
unobserve: jest.fn(),
|
|
disconnect: jest.fn(),
|
|
}));
|
|
|
|
jest.setTimeout(1000000);
|
|
|
|
mergeConfig({
|
|
LEARNING_BASE_URL: process.env.LEARNING_BASE_URL,
|
|
LEARNER_FEEDBACK_URL: process.env.LEARNER_FEEDBACK_URL,
|
|
STAFF_FEEDBACK_URL: process.env.STAFF_FEEDBACK_URL,
|
|
ENABLE_PROFILE_IMAGE: process.env.ENABLE_PROFILE_IMAGE || 'false',
|
|
}, 'DiscussionsConfig');
|