我已经在我的Windows PC上安装了nodejs.它工作正常.但是当我尝试使用"npm install jsdom"安装jsdom时,我被这个错误提示.
节点"C:\ Program Files \nodejs \node_modules \npm\bin \node-gyp-bin\.... \node_modules \node-gyp\bin \node-gyp.js"重建信息,如果它以ok结束它是否有效
呃!错误:似乎没有
在Object.oncomplete(C:\ Program Files)的failNoPython(C:\ Program Files \nodejs \node_modules \npm \node_modules \node-gyp\lib\configure.js:78:14)中安装Python \的NodeJS \node_modules\NPM \node_modules \节点-GYP\lib中\ configure.js:66:11)ERR!不行
npm WARN可选依赖失败,继续contextify@0.1.2
jsdom@0.2.13 ./node_modules/jsdom
+ - cssom@0.2.3 + - htmlparser@1.7.5
有人可以帮我解决这个问题吗?
我找到了一些提到类似问题的人的答案总是如此,确保你在完成后调用window.close().然而,这对我来说似乎没有用(节点0.8.14和jsdom 0.3.1)
一个简单的复制品
var util = require('util');
var jsdom=require('jsdom');
function doOne() {
var htmlDoc = '<html><head></head><body id="' + i + '"></body></html>';
jsdom.env(htmlDoc, null, null, function(errors, window) {
window.close();
});
}
for (var i=1;i< 100000;i++ ) {
doOne();
if(i % 500 == 0) {
console.log(i + ":" + util.inspect(process.memoryUsage()));
}
}
console.log ("done");
Run Code Online (Sandbox Code Playgroud)
我得到的输出是
500:{ rss: 108847104, heapTotal: 115979520, heapUsed: 102696768 }
1000:{ rss: 198250496, heapTotal: 194394624, heapUsed: 190892120 }
1500:{ rss: 267304960, heapTotal: 254246912, heapUsed: 223847712 }
...
11000:{ rss: …Run Code Online (Sandbox Code Playgroud) 我正在尝试从AVA迁移到Jest.在AVA中,您可以设置环境中的ava.setup设置jsdom.例如,创建DOM结构并执行必要的polyfill(localStorage).
我如何在Jest中实现这一目标?目前,我正在使用beforeEach每个测试套件,这不是最好的解决方案.
提前致谢!
我正在从node.js迁移到io.js,而我的旧node.js代码不适用于jsdom @ 5.
var jsdom=require('jsdom');
var $=require('jquery')(jsdom.jsdom().createWindow);
Run Code Online (Sandbox Code Playgroud)
这是错误:
/tmp/iojs/node_modules/jquery/dist/jquery.js:28
if ( !w.document ) {
^
TypeError: Cannot read property 'document' of undefined
at module.exports (/tmp/iojs/node_modules/jquery/dist/jquery.js:28:12)
at Object.<anonymous> (/tmp/iojs/test.js:2:24)
at Module._compile (module.js:431:26)
at Object.Module._extensions..js (module.js:449:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
at Function.Module.runMain (module.js:472:10)
at startup (node.js:124:18)
at node.js:959:3
Run Code Online (Sandbox Code Playgroud)
我正在使用最新的io.js v2.0.1,jsdom@5.4.1和jquery@2.1.4.
在jsdom @ 5中使用jQuery的正确方法是什么?
我正在测试在安装和卸载时到达DOM结构之外的几个组件,以提供其他方式无法实现的特定交互功能.
我正在使用Jest和默认的JSDOM初始化来在节点内创建类似浏览器的环境.我在文档中找不到任何建议在每次测试执行后Jest重置JSDOM,并且如果不是这样的话,没有关于如何手动执行此操作的明确文档.
我的问题是,Jest是否在每次测试,套件之后重置JSDOM实例,还是在所有测试运行中保留一个JSDOM实例?如果是这样,我该如何控制它?
我在 React WebApp 中使用 globalThis 属性,特别是 globalThis.scrollTo(0,0)。
我正在使用 Jest 和 Enzyme 进行单元测试。
由于测试用例失败,因为它无法识别 globalThis 并说 'globalThis' 未定义。
有没有办法像 jsdom 对 window 等所做的那样将 globalThis 引入测试?
例如
-- abc.tsx --
const abc: React.FC<CustomProps> = props => {
useEffect(() => {
globalThis?.scrollTo(0,0);
}
}
Run Code Online (Sandbox Code Playgroud)
-- abcTest.tsx --
wrapper = mount(<abc/>);
Run Code Online (Sandbox Code Playgroud)
mount产生错误,即“globalThis”未定义
我正在测试一个使用 Redux 构建的非常基本的反例元素。这是我的测试:
import userEvent from "@testing-library/user-event";
import { render, screen } from "src/testUtils";
import { Counter } from "../Counter";
describe("Counter screen", () => {
it("buttons should change displayed value", () => {
render(<Counter />);
const counter = screen.getByText(/counter*/i);
const plus = screen.getByRole("button", { name: /\+/i });
const minus = screen.getByText(/\-/i);
expect(counter).toHaveTextContent("0");
userEvent.click(plus);
userEvent.click(plus);
expect(counter).toHaveTextContent("10");
userEvent.click(minus);
expect(counter).toHaveTextContent("9");
});
});
Run Code Online (Sandbox Code Playgroud)
测试全部通过,但我收到了大量错误jsdom测试全部通过,但我在记录到控制台
Error: Not implemented: window.computedStyle(elt, pseudoElt)
at module.exports (/home/abhijeet/Documents/github/react-template/node_modules/jsdom/lib/jsdom/browser/not-implemented.js:9:17)
at Window.getComputedStyle (/home/abhijeet/Documents/github/react-template/node_modules/jsdom/lib/jsdom/browser/Window.js:657:7)
at computeMiscTextAlternative (/home/abhijeet/Documents/github/react-template/node_modules/@testing-library/react/node_modules/dom-accessibility-api/sources/accessible-name.ts:306:62)
at computeTextAlternative (/home/abhijeet/Documents/github/react-template/node_modules/@testing-library/react/node_modules/dom-accessibility-api/sources/accessible-name.ts:521:11)
at …Run Code Online (Sandbox Code Playgroud) 我遇到一个问题,第三方库正在使用 JSDOM 中不可用的一些有效的 CSS 解析器功能,我只想抑制此类错误。但考虑到我通过 Jest 使用 JSDOM,我不太确定如何做到这一点。我查看了testEnvironmentOptionsJest 文档中的 ,但我不知道要设置哪些选项。
错误消息基本上如下:
Error: Could not parse CSS stylesheet
at exports.createStylesheet (node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js:35:21)
at HTMLStyleElementImpl._updateAStyleBlock (node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:68:5)
at HTMLStyleElementImpl._childTextContentChangeSteps (node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:37:12)
at HTMLStyleElementImpl.insertBefore (node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:225:14)
at HTMLStyleElementImpl.insertBefore (node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:202:14)
at HTMLStyleElementImpl.appendChild (node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:327:17)
at HTMLToDOM._parseWithParse5 (node_modules/jsdom/lib/jsdom/browser/htmltodom.js:60:21)
at HTMLToDOM._doParse (node_modules/jsdom/lib/jsdom/browser/htmltodom.js:47:42)
at HTMLToDOM.appendToNode (node_modules/jsdom/lib/jsdom/browser/htmltodom.js:37:17)
at setInnerHTML (node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js:40:25)
at HTMLStyleElementImpl.set innerHTML [as innerHTML] (node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js:211:5)
at HTMLStyleElement.set [as innerHTML] (node_modules/jsdom/lib/jsdom/living/generated/Element.js:874:29)
at node_modules/sweetalert2/dist/sweetalert2.all.js:1978:1
at Object.<anonymous> (node_modules/sweetalert2/dist/sweetalert2.all.js:1978:1)
Run Code Online (Sandbox Code Playgroud)
它似乎也与 SweetAlert2 库有关。
I have looked into similar questions (like this one), but the proposed solutions didn't work for me when using react-testing-library.
I have a component that can receive multiple children. This component will then calculate its own size and its children size, to check how many children it will be able to render. It works fine when I use it in my application.
My problem is that, when rendering this component with react-testing-library, the container of the component …
TextEncoder尝试在 NX 存储库(打字稿/角度)中将 jsdom 与 Jest 一起使用,我得到了和TextDecoder不存在的问题。无论我将 jest 设置testEnvironment为'jsdom'或 ,'node'并且节点版本从 10 到 16,我都会得到相同的结果)
因此,按照其他人发布的解决方案(谢谢!),我将它们导入到我的test-setup.tsfrom 节点中并将它们设置在节点全局对象上:
import 'jest-preset-angular/setup-jest'
import { TextEncoder, TextDecoder } from 'util';
global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder;
Run Code Online (Sandbox Code Playgroud)
这似乎适用于TextEncoder,但不适用于TextDecoder:
libs/xplat/features/test-setup.ts:10:1 - error TS2322: Type 'typeof TextDecoder' is not assignable to type '{ new (label?: string | undefined, options?: TextDecoderOptions | undefined): TextDecoder; prototype: TextDecoder; }'.
The types of 'prototype.decode' are incompatible between these …Run Code Online (Sandbox Code Playgroud) jsdom ×10
jestjs ×7
javascript ×3
node.js ×3
reactjs ×3
angular ×1
ava ×1
enzyme ×1
io.js ×1
jquery ×1
memory-leaks ×1
npm ×1
react-redux ×1
sweetalert2 ×1
testing ×1