From 4471692191e721e03efe5601c8fe5a8ebe183e64 Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Thu, 10 Oct 2019 10:00:32 +0200 Subject: [PATCH 1/3] test: Run all tests in node --- tests/jest.config.node.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/jest.config.node.js b/tests/jest.config.node.js index bf37b60b..9f6a78eb 100644 --- a/tests/jest.config.node.js +++ b/tests/jest.config.node.js @@ -11,5 +11,4 @@ module.exports = { '/__tests__/', '/__node_tests__/', ], - testMatch: ['**/__node_tests__/**.js'], } From 395fb3ddc5e90c361b971ec6a55ee3653ca24c4c Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Thu, 10 Oct 2019 10:06:41 +0200 Subject: [PATCH 2/3] Lint against global browser --- .eslintrc.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..fdaa3e25 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,6 @@ +module.exports = { + extends: require.resolve('kcd-scripts/dist/config/eslintrc.js'), + env: { + browser: false, + }, +} From 95dae0b915d6c7e781c00bff603bee7e83ce57bf Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Thu, 10 Oct 2019 10:21:25 +0200 Subject: [PATCH 3/3] Partial fixing --- src/__tests__/element-queries.js | 1 + src/__tests__/events.js | 4 +++- src/__tests__/example.js | 1 + src/__tests__/get-queries-for-element.js | 1 + src/__tests__/helpers.js | 2 ++ src/__tests__/helpers/document.js | 9 +++++++++ src/__tests__/helpers/test-utils.js | 1 + src/__tests__/pretty-dom.js | 1 + src/__tests__/wait-for-dom-change.js | 2 ++ src/__tests__/wait-for-element-to-be-removed.js | 3 +++ src/role-helpers.js | 13 ++++++++++++- 11 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/__tests__/helpers/document.js diff --git a/src/__tests__/element-queries.js b/src/__tests__/element-queries.js index b9ad2ee0..94c9ed99 100644 --- a/src/__tests__/element-queries.js +++ b/src/__tests__/element-queries.js @@ -1,5 +1,6 @@ import {configure} from '../config' import {render, renderIntoDocument} from './helpers/test-utils' +import document from './helpers/document' beforeEach(() => { document.defaultView.Cypress = null diff --git a/src/__tests__/events.js b/src/__tests__/events.js index 3d11c12e..a955df91 100644 --- a/src/__tests__/events.js +++ b/src/__tests__/events.js @@ -1,4 +1,6 @@ +import document from './helpers/document' import {fireEvent} from '..' +const window = document.defaultView const eventTypes = [ { @@ -219,7 +221,7 @@ test('fires shortcut events on Window', () => { }) test('throws a useful error message when firing events on non-existent nodes', () => { - expect(() => fireEvent(undefined, new MouseEvent('click'))).toThrow( + expect(() => fireEvent(undefined, new window.MouseEvent('click'))).toThrow( 'Unable to fire a "click" event - please provide a DOM element.', ) }) diff --git a/src/__tests__/example.js b/src/__tests__/example.js index 792d7d1f..7e6e701c 100644 --- a/src/__tests__/example.js +++ b/src/__tests__/example.js @@ -7,6 +7,7 @@ import { wait, fireEvent, } from '../' +import document from './helpers/document' function getExampleDOM() { // This is just a raw example of setting up some DOM diff --git a/src/__tests__/get-queries-for-element.js b/src/__tests__/get-queries-for-element.js index 1a6afba8..93c11ca3 100644 --- a/src/__tests__/get-queries-for-element.js +++ b/src/__tests__/get-queries-for-element.js @@ -1,4 +1,5 @@ import {getQueriesForElement} from '../get-queries-for-element' +import document from './helpers/document' import {queries} from '..' test('uses default queries', () => { diff --git a/src/__tests__/helpers.js b/src/__tests__/helpers.js index cbf6e628..8294e57d 100644 --- a/src/__tests__/helpers.js +++ b/src/__tests__/helpers.js @@ -1,4 +1,6 @@ import {getDocument, newMutationObserver} from '../helpers' +import document from './helpers/document' +const window = document.defaultView test('returns global document if exists', () => { expect(getDocument()).toBe(document) diff --git a/src/__tests__/helpers/document.js b/src/__tests__/helpers/document.js new file mode 100644 index 00000000..d2f9e0da --- /dev/null +++ b/src/__tests__/helpers/document.js @@ -0,0 +1,9 @@ +// https://github.com/testing-library/jest-dom/blob/v4.1.2/src/__tests__/helpers/document.js +if (global.document) { + module.exports = global.document +} else { + const {JSDOM} = require('jsdom') + const {window} = new JSDOM() + + module.exports = window.document +} diff --git a/src/__tests__/helpers/test-utils.js b/src/__tests__/helpers/test-utils.js index 8469a87d..95151bd0 100644 --- a/src/__tests__/helpers/test-utils.js +++ b/src/__tests__/helpers/test-utils.js @@ -1,4 +1,5 @@ import {getQueriesForElement} from '../../get-queries-for-element' +import document from './document' function render(html, {container = document.createElement('div')} = {}) { container.innerHTML = html diff --git a/src/__tests__/pretty-dom.js b/src/__tests__/pretty-dom.js index 22cf95aa..d12614fd 100644 --- a/src/__tests__/pretty-dom.js +++ b/src/__tests__/pretty-dom.js @@ -1,5 +1,6 @@ import {prettyDOM, logDOM} from '../pretty-dom' import {render, renderIntoDocument} from './helpers/test-utils' +import document from './helpers/document' beforeEach(() => { jest.spyOn(console, 'log').mockImplementation(() => {}) diff --git a/src/__tests__/wait-for-dom-change.js b/src/__tests__/wait-for-dom-change.js index 730a4c20..6308a4d4 100644 --- a/src/__tests__/wait-for-dom-change.js +++ b/src/__tests__/wait-for-dom-change.js @@ -1,4 +1,6 @@ import {renderIntoDocument} from './helpers/test-utils' +import document from './helpers/document' +const window = document.defaultView function importModule() { return require('../').waitForDomChange diff --git a/src/__tests__/wait-for-element-to-be-removed.js b/src/__tests__/wait-for-element-to-be-removed.js index e52dfd21..fad8be54 100644 --- a/src/__tests__/wait-for-element-to-be-removed.js +++ b/src/__tests__/wait-for-element-to-be-removed.js @@ -1,4 +1,7 @@ import {renderIntoDocument} from './helpers/test-utils' +import document from './helpers/document' + +const window = document.defaultView function importModule() { return require('../').waitForElementToBeRemoved diff --git a/src/role-helpers.js b/src/role-helpers.js index 8ed3568b..bcc19c31 100644 --- a/src/role-helpers.js +++ b/src/role-helpers.js @@ -3,6 +3,17 @@ import {prettyDOM} from './pretty-dom' const elementRoleList = buildElementRoleList(elementRoles) +/** + * @param {Node} node - + * @returns {Window} - + */ +function defaultViewOf(node) { + // is null when node is already the document + return node.ownerDocument === null + ? node.defaultView + : node.ownerDocument.defaultView +} + /** * Partial implementation https://www.w3.org/TR/wai-aria-1.2/#tree_exclusion * which should only be used for elements with a non-presentational role i.e. @@ -15,7 +26,7 @@ const elementRoleList = buildElementRoleList(elementRoles) * @returns {boolean} true if excluded, otherwise false */ function isInaccessible(element) { - const window = element.ownerDocument.defaultView + const window = defaultViewOf(element) const computedStyle = window.getComputedStyle(element) // since visibility is inherited we can exit early if (computedStyle.visibility === 'hidden') {