diff --git a/docs/guides/jsdom.md b/docs/guides/jsdom.md index 7b7c4e621..498be99af 100644 --- a/docs/guides/jsdom.md +++ b/docs/guides/jsdom.md @@ -11,22 +11,52 @@ gets run *before* React's code is run. As a result, a standalone script like the one below is generally a good approach: +`jsdom v10~`: + ```js /* setup.js */ -var jsdom = require('jsdom').jsdom; +const { JSDOM } = require('jsdom'); +const jsdom = new JSDOM(''); +const { window } = jsdom; + +function copyProps(src, target) { + const props = Object.getOwnPropertyNames(src) + .filter(prop => typeof target[prop] === 'undefined') + .map(prop => Object.getOwnPropertyDescriptor(src, prop)); + Object.defineProperties(target, props); +} + +global.window = window; +global.document = window.document; +global.navigator = { + userAgent: 'node.js' +}; +copyProps(window, global); +``` + +Here is the sample of [jsdom old API](https://github.com/tmpvar/jsdom/blob/master/lib/old-api.md) as well. + +`jsdom ~ { - if (typeof global[property] === 'undefined') { - global[property] = document.defaultView[property]; - } -}); - global.navigator = { userAgent: 'node.js' }; + +function copyProps(src, target) { + const props = Object.getOwnPropertyNames(src) + .filter(prop => typeof target[prop] === 'undefined') + .map(prop => Object.getOwnPropertyDescriptor(src, prop)); + Object.defineProperties(target, props); +} +copyProps(document.defaultView, global); ```