1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/test/helper.js
Mark Stacey 7d0a7ab301
Update @metamask/eslint-config to v4.1.0 (#9663)
`@metamask/eslint-config` has been updated to v4.1.0. This update
requires that we update `eslint` to v7 as well, which in turn requires
updating most `eslint`-related packages.

Most notably, `babel-eslint` was replaced with `@babel/eslint-parser`,
and `babel-eslint-plugin` was replaced by `@babel/eslint-plugin`. This
required renaming all the `babel/*` rules to `@babel/*`.

Most new or updated rules that resulted in lint errors have been
temporarily disabled. They will be fixed and re-enabled in subsequent
PRs.
2020-10-21 14:01:03 -02:30

92 lines
2.4 KiB
JavaScript

import Ganache from 'ganache-core'
import nock from 'nock'
import Enzyme from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'
import log from 'loglevel'
import { JSDOM } from 'jsdom'
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() })
// ganache server
const server = Ganache.server()
server.listen(8545)
server.on('error', console.error)
server.on('clientError', console.error)
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)
// delete AbortController added by jsdom so it can be polyfilled correctly below
delete window.AbortController
// fetch
const fetch = require('node-fetch')
const { Headers, Request, Response } = fetch
Object.assign(window, { fetch, Headers, Request, Response })
require('abortcontroller-polyfill/dist/polyfill-patch-fetch')
// localStorage
window.localStorage = {}
// 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')
}