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);
});
}