lundi 8 octobre 2018

TypeError: Cannot set property '_eventListeners' of undefined

Getting below error while running the tests using React + jest + Enzyme, please help!

● Test suite failed to run
TypeError: Cannot set property '_eventListeners' of undefined
at Window.close (E:/TEST-UI/node_modules/jsdom/lib/jsdom/browser/Window.js:498:51)
at Generator.throw ()

The error is weired! even I tried to setup the jsdom like below but nothing worked!

const jsdom = new JSDOM('<!doctype html><html><body></body></html>');

Below are are code snippets.

import Enzyme from 'enzyme';

import Adapter from 'enzyme-adapter-react-16';
import 'jsdom-global/register';
import "isomorphic-fetch";


Enzyme.configure({adapter: new Adapter()});

export * from 'enzyme';


 "devDependencies": {
    "@babel/core": "^7.1.0",
    "@babel/plugin-transform-runtime": "^7.1.0",
    "@babel/preset-env": "^7.1.0",
    "@babel/preset-react": "^7.0.0",
    "babel-core": "^7.0.0-bridge.0",
    "babel-jest": "^23.4.2",
    "babel-loader": "^8.0.2",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-polyfill": "^6.26.0",
    "css-loader": "^0.28.11",
    "enzyme": "^3.6.0",
    "enzyme-adapter-react-16": "^1.5.0",
    "enzyme-to-json": "^3.3.0",
    "html-loader": "^0.5.5",
    "html-webpack-plugin": "^3.2.0",
    "jest": "^23.5.0",
    "jsdom": "^11.12.0",
    "jsdom-global": "3.0.2",
    "mini-css-extract-plugin": "^0.4.1",
    "raw-loader": "^0.5.1",
    "react-hot-loader": "^4.1.1",
    "regenerator-runtime": "^0.12.1",
    "style-loader": "^0.21.0",
    "url-loader": "^1.1.1",
    "webpack": "^4.19.1",
    "webpack-cli": "^3.0.3",
    "webpack-dev-server": "^3.1.4"
  },


import React from "react";
import Notification from "./Notification";
import { shallow, mount, render } from 'enzyme';
import "src/config/jsdom.setup";

describe('<Notification />', () => {
    test("always renders notificationCount", () => {
        let wrapper = shallow(<Notification/>);
        const divs = wrapper.find("div");
        expect(divs.length).toBeGreaterThan(0);

    });
});


require('babel-register')();

const jsdom = require('jsdom').jsdom;
const exposedProperties = ['window', 'navigator', 'document'];

global.document = jsdom('');
global.window = document.defaultView;

Object.keys(document.defaultView).forEach(property => {
    if (typeof global[property] === 'undefined') {
        exposedProperties.push(property);
        global[property] = document.defaultView[property];
    }
});

global.navigator = {userAgent: 'node.js'};

1 commentaire:

  1. Hi Yassine,

    I am also facing the same issue, Did you get any solution for this?

    Thanks in advance!

    RépondreSupprimer