1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-02 14:15:06 +01:00
metamask-extension/test/helpers/setup-helper.js
Mark Stacey 22f9de9a2c Refactor: Extract SRP input from create vault component (#13720)
This is a pure refactor that extracts the SRP input from the
`CreateNewVault` component. This is intended to make future changes to
the SRP input easier, and to reduce duplication between the old and new
onboarding flows.

Extensive unit tests have been added for the new SRP input component.

A new test library was added (`@testing-library/user-event`) for
simulating user events with components rendered using the
`@testing-library` library.

A new helper method has been added (`renderWithLocalization`) for
rendering components using `@testing-library` with just our
localization contexts added as a wrapper. The localization contexts
were already added by the `renderWithProviders` helper function, but
there is no need for a Redux provider in these unit tests.
2022-03-21 18:51:18 -02:30

90 lines
2.4 KiB
JavaScript

import nock from 'nock';
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import log from 'loglevel';
import { JSDOM } from 'jsdom';
process.env.IN_TEST = true;
nock.disableNetConnect();
nock.enableNetConnect('localhost');
// catch rejections that are still unhandled when tests exit
const unhandledRejections = new Map();
process.on('unhandledRejection', (reason, promise) => {
console.log('Unhandled rejection:', reason);
unhandledRejections.set(promise, reason);
});
process.on('rejectionHandled', (promise) => {
console.log(`handled: ${unhandledRejections.get(promise)}`);
unhandledRejections.delete(promise);
});
process.on('exit', () => {
if (unhandledRejections.size > 0) {
console.error(`Found ${unhandledRejections.size} unhandled rejections:`);
for (const reason of unhandledRejections.values()) {
console.error('Unhandled rejection: ', reason);
}
process.exit(1);
}
});
Enzyme.configure({ adapter: new Adapter() });
log.setDefaultLevel(5);
global.log = log;
//
// polyfills
//
// dom
const jsdom = new JSDOM();
global.window = jsdom.window;
// required by `trezor-connect/node_modules/whatwg-fetch`
global.self = window;
// required by `dom-helpers` and various other libraries
global.document = window.document;
// required by `react-tippy`
global.navigator = window.navigator;
global.Element = window.Element;
// required by `react-popper`
global.HTMLElement = window.HTMLElement;
// required by any components anchored on `popover-content`
const popoverContent = window.document.createElement('div');
popoverContent.setAttribute('id', 'popover-content');
window.document.body.appendChild(popoverContent);
// fetch
const fetch = require('node-fetch');
const { Headers, Request, Response } = fetch;
Object.assign(window, { fetch, Headers, Request, Response });
// localStorage
window.localStorage = {
removeItem: () => null,
};
// override @metamask/logo
window.requestAnimationFrame = () => undefined;
// crypto.getRandomValues
if (!window.crypto) {
window.crypto = {};
}
if (!window.crypto.getRandomValues) {
// eslint-disable-next-line node/global-require
window.crypto.getRandomValues = require('polyfill-crypto.getrandomvalues');
}
// Used to test `clearClipboard` function
if (!window.navigator.clipboard) {
window.navigator.clipboard = {};
}
if (!window.navigator.clipboard.writeText) {
window.navigator.clipboard.writeText = () => undefined;
}