Reactjs JSDOM:无法分析CSS样式表

Reactjs JSDOM:无法分析CSS样式表,reactjs,mocha.js,enzyme,jsdom,Reactjs,Mocha.js,Enzyme,Jsdom,使用以下命令: ./node_modules/babel-core/register.js ./node_modules/jsdom-global/register.js **/*_spec.jsx 我正在运行以下测试文件: "use strict"; import React from 'react'; import {expect} from 'chai'; import Enzyme from 'enzyme'; import Adapter from 'enzyme-adapter-

使用以下命令:

./node_modules/babel-core/register.js ./node_modules/jsdom-global/register.js **/*_spec.jsx
我正在运行以下测试文件:

"use strict";

import React from 'react';
import {expect} from 'chai';
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import {Home} from '../../../src/home/home.jsx';

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

describe('<Home />', () => {
    const setup = () => {
        const props = {
            isButtonOn: true,
            toggleButton: () => null,
        };
        return Enzyme.shallow(<Home {...props}/>);
    };

    it('should a title and a button', () => {
        const wrapper = setup();
        expect(wrapper.find('.title').length).to.equal(1);
        expect(wrapper.find('button').length).to.equal(1);
    });
});
错误消息消失。这让我相信sweetalert2中使用的css没有被JSDOM正确解析。一个潜在的解决方案似乎是使用虚拟控制台:

const virtualConsole = new jsdom.VirtualConsole();
const dom = new JSDOM(``, { virtualConsole });
或在忽略错误时发送到控制台:

virtualConsole.sendTo(console, {omitJSDOMErrors: true});
然而,我在这些方法上没有取得成功

如何避免此错误污染控制台

编辑:我可以通过将我的JSDOM逻辑放在一个单独的文件中来解决这个问题:

"use strict";

process.env.NODE_ENV = 'test';

require('babel-register')();

const jsdom = require('jsdom');
const {JSDOM} = jsdom;
const virtualConsole = new jsdom.VirtualConsole();
const dom = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>', {virtualConsole});

global.document = dom.window.document;
global.window = dom.window.document.defaultView;
global.navigator = {userAgent: 'node.js'};
global.requestAnimationFrame = () => null;

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

通过运行
npm测试
,我得到的测试结果没有任何控制台污染。

正如@JKB提到的,使用此代码修复了错误

const virtualConsole = new jsdom.VirtualConsole();
const dom = new JSDOM(``, { virtualConsole });

我确实可以确认,使用该代码帮助并修复了它。 基本上,我不再在控制台上看到错误

const fs = require("fs");
const got = require("got");
const jsdom = require("jsdom");
const { JSDOM } = jsdom;

async function newsCatcher(option) {
const virtualConsole = new jsdom.VirtualConsole();
const website = 'website here';

const TEST = await got(website)
      .then((response) => {
        const dom = new JSDOM(response.body, {virtualConsole});
        const info = Array.from(
          dom.window.document.querySelectorAll(
            "li.stack__slice__item > article > div.card__inner > div.card__content > div > h3 > a"
          )
        )
        .map((e) => e.innerHTML);
return info
        console.log('info:', info[0]);
})
.catch((err) => {
        console.log(err);
      });
}

请详细描述一下你是什么意思?我在回复那个人。说明解决方案确实有效,我的代码,
"use strict";

process.env.NODE_ENV = 'test';

require('babel-register')();

const jsdom = require('jsdom');
const {JSDOM} = jsdom;
const virtualConsole = new jsdom.VirtualConsole();
const dom = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>', {virtualConsole});

global.document = dom.window.document;
global.window = dom.window.document.defaultView;
global.navigator = {userAgent: 'node.js'};
global.requestAnimationFrame = () => null;

const exposedProperties = ['window', 'navigator', 'document'];
Object.keys(document.defaultView).forEach((property) => {
    if (typeof global[property] === 'undefined') {
        exposedProperties.push(property);
        global[property] = document.defaultView[property];
    }
});
"test": "mocha --reporter progress tools/testSetup.js \"**/*_spec.jsx\""
const virtualConsole = new jsdom.VirtualConsole();
const dom = new JSDOM(``, { virtualConsole });
const fs = require("fs");
const got = require("got");
const jsdom = require("jsdom");
const { JSDOM } = jsdom;

async function newsCatcher(option) {
const virtualConsole = new jsdom.VirtualConsole();
const website = 'website here';

const TEST = await got(website)
      .then((response) => {
        const dom = new JSDOM(response.body, {virtualConsole});
        const info = Array.from(
          dom.window.document.querySelectorAll(
            "li.stack__slice__item > article > div.card__inner > div.card__content > div > h3 > a"
          )
        )
        .map((e) => e.innerHTML);
return info
        console.log('info:', info[0]);
})
.catch((err) => {
        console.log(err);
      });
}