mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-26 12:29:06 +01:00
f49e5076f3
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.
90 lines
2.4 KiB
JavaScript
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;
|
|
}
|