jsdom 相关问题

为node.js实施WHATWG DOM和HTML标准(以及其他)

当我有角度(1.6)作为依赖项时,无法使用摩卡测试某些内容

我想测试一个 ng-redux 减速器,它具有角度(1.6)作为依赖项。 当我使用 mocha 运行测试(npm test)时,我得到: /data/work/mocha-angularjs/node_modules/angular/angular.js:33343 })(风...

回答 1 投票 0

JSDOM 返回一个空元素

这是片段 让thtml =“” jsdom.env({ html: thtml , 完成:功能...

回答 1 投票 0

JSDOM 支持媒体查询吗?

我知道 JSDOM 并没有实现真正浏览器的许多功能,但我读过很多关于它到底支持什么和不支持 CSS 的相互冲突的信息。 ...

回答 1 投票 0

如何使用saxonjs和nodejs获取xml文件中的变量

我有一个xml文件: 描述 我有一个 xml 文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE agent SYSTEM "http://www.someUrl.com"> <myData> <service> <description>Description</description> </service> <courier> <listener port="55556" /> <mainService name="Some Name" port="55555" /> </courier> </myData> 我想使用nodejs获取监听器端口变量的值。 根据 SaxonJs 的文档 SaxonJS.XPath.evaluate 是我需要的方法。它需要一个查询和一个文档节点对象。当我将 xml 文件转换为 dom 对象时,我收到错误消息:“Uncaught TypeError TypeError:无法读取未定义的属性(读取“长度”)” const saxonJs = require('saxon-js'); const fs = require('node:fs'); const jsdom = require("jsdom"); var xmlFile = fs.readFileSync(xmlFilePath, 'utf8'); var doc = new jsdom.JSDOM(xml); var xpathQuery = '//listener/@port'; var result = saxonJs.XPath.evaluate(xpathQuery, doc); 您是否特别需要使用XPath?由于您有 JSDOM,我只需使用 CSS 选择器进行查询: import {JSDOM} from "jsdom"; // ^24.0.0 const xml = `<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE agent SYSTEM "http://www.someUrl.com"> <myData> <service> <description>Description</description> </service> <courier> <listener port="55556" /> <mainService name="Some Name" port="55555" /> </courier> </myData>`; const dom = new JSDOM(xml, {contentType: "application/xml"}); const {document} = dom.window; const port = document.querySelector("listener").getAttribute("port"); console.log(port); // => 55556 如果您确实想使用 XPath,可以在 JSDOM 中执行(请注意 [@port] 更改为按 listener 元素上的属性进行选择): const port = document .evaluate( "//listener[@port]", document, null, 9, // FIRST_ORDERED_NODE_TYPE ) .singleNodeValue .getAttribute("port"); 或直接选择属性字符串值: const port = document .evaluate( "//listener/@port", document, null, 2, // STRING_TYPE ) .stringValue; 在撰写本文时,JSDOM 每周下载量为 22,000,000 次,而 saxon-js 为 20,000 次。如果可能的话,我会避免对 saxon-js 的依赖。

回答 1 投票 0

起源问题不允许我将 localStorage 与 JSDOM 一起使用

所以我尝试使用 JSDOM 在节点环境中加载网页。该网页使用本地存储。 我使用 JSDOM 的 url 配置选项通过文件系统加载网页。 JSDOM 给了我...

回答 1 投票 0

任何其他获取 svg 的边界矩形值的方法

我有必须在 JSDOM 内处理的 SVG 元素,并且需要获取它们的 getBBox() 值。 使用 getBBox() 时,由于 JSDOM 内没有执行绘制,因此值不是 obta...

回答 1 投票 0

在 AdonisJS 中使用 DOM 和 Playwright 来生成 PDF

我正在寻求有关在 AdonisJS 中针对特定用例使用 DOM 的指导。 据我了解,AdonisJS 主要是为服务器端开发而设计的,可能不会自动包含 TypeScr...

回答 1 投票 0

vitest react-testing-library:如何测试xlsx文件上传和处理?

我有一个React组件,用户可以在其中选择一个xlsx文件并解析它并在表格中显示数据。 我想为其创建一个简单的端到端测试: 上传已知的 xlsx 文件...

回答 1 投票 0

错误“文档”未定义:eslint / React

我正在使用 create-react-app 构建一个 React 应用程序。 运行 ESLint 时出现以下错误: 8:3 错误 '文档' 未定义 no-undef。 我的应用程序运行没有错误,但我得到了这个 ESLint e...

回答 5 投票 0

使用 vitest 时如何重置 jsdom 实例以测试基于历史记录的路由器?

我想使用 vitest 对基于 svelte + page.js 的路由器进行一些集成测试,但我遇到了一个问题,即 jsdom 实例每个测试文件只能正确更新一次。 在

回答 1 投票 0

基于Ui的集成测试无法从ElementID获取预期值

首先也是最重要的。我是一个完全的初学者。我没有先验知识或共识,所以我不知道我在做什么,但我知道这是一项作业。我已经被困在这一部分上了……

回答 1 投票 0

升级到React 17后,addEventListener无意中添加了selectionchange事件到文档中

我正在使用jest v27和@testing-library/react v12,我升级到React 17,有addEventListener无意中添加到文档中的selectionchange事件。我根本没有使用这个事件。

回答 1 投票 0

为什么 JQuery 需要全局“窗口”对象?

我将 jsdom 与 jquery 一起使用来抓取 Node.js 应用程序中的静态 Web 内容。 jsdom 将 HTML 字符串转换为 DOM 树,包括 window 属性。我发现我必须分配...

回答 3 投票 0

jsdom 和 node.js 内存泄漏

我发现了一些关于有类似问题的人的参考,其中答案总是,确保完成后调用 window.close() 。然而,这似乎对我不起作用(节点 0.8.14 和 j...

回答 6 投票 0

Angular 通用 SSR + JSDOM + Webpack:无法解析“画布”

我正在尝试使用 jsdom 为我的 SSR Angular 项目创建窗口和文档对象。但是,我遇到了这个错误。我正在使用该窗口尝试初始化 jQuery 库(到

回答 1 投票 0

使用 jsdom、sinon、mocha 和 chai 测试图像加载

谁能帮我测试以下功能 函数 onload(cb){ 常量图像 = 'http://placehold.it/350x150' 常量 img = 新图像() img.src = 图片 img.onload = () => { c...

回答 2 投票 0

JSDOM 中的 MutationObserver 失败,因为参数 1 不是 Node 类型

我正在尝试使用 JSDOM 和 Jest 测试一个简单的 JavaScript 单页应用程序。 出于我们的目的,index.html 是一个简单的 html 文档,其中包含标签 我正在尝试使用 JSDOM 和 Jest 测试一个简单的 JavaScript 单页应用程序。 就我们的目的而言,index.html 是一个简单的 html 文档,其中包含标签 <div id="app-root"></div> 和 index.js,它通过 index.html 中的 <script> 标签加载,并在<div>看起来像这样:app-root。所以运行时我的最终 HTML 是:<div class="my-embed"></div> <div id="app-root"> <div class="my-embed"></div> </div> 始终存在,并且#app-root在执行.my-embed后存在。我尝试通过使用 <script> 加载 HTML 来测试这一点,然后验证是否添加了新的 runScripts: 'dangerously'。这是我的测试脚本: <div> 当我运行此程序时,它不断出错“TypeError:无法在“MutationObserver”上执行“observe”:参数 1 不是“Node”类型。”但据我所知,我传入的 import '@testing-library/jest-dom/extend-expect' import { JSDOM } from 'jsdom' import fs from 'fs' import path from 'path' const html = fs.readFileSync(path.resolve(__dirname, '../index.html'), 'utf8'); let dom let container function waitForElm(parentElm, selector) { console.log(parentElm); console.log(parentElm.outerHTML); console.log(selector); return new Promise(resolve => { if (parentElm.querySelector(selector)) { return resolve(parentElm.querySelector(selector)); } const observer = new MutationObserver(mutations => { if (parentElm.querySelector(selector)) { resolve(parentElm.querySelector(selector)); observer.disconnect(); } }); observer.observe(parentElm, { childList: true, subtree: true }); }); } describe('index.html', () => { beforeEach(() => { dom = new JSDOM(html, { runScripts: 'dangerously', resources: "usable" }) }) it('adds a tag', async () => { container = dom.window.document.body.querySelector("#app-root") const elm = await waitForElm(container, '.my-embed'); console.log(elm) expect(container.querySelector('.my-embed')).not.toBeNull() }); }) 是 一个 HTML 节点。 parentElm 我在这里缺少什么?为什么突变观察者不将 HTMLDivElement {} 视为节点传递? 我相信我遇到了同样的问题。隐式存在两个不同的 JSDOM 实例:一个是在每次测试时显式实例化的(即 $> npx jest console.log waiting at VirtualConsole.onMethodCall (node_modules/jsdom/lib/jsdom/virtual-console.js:22:29) console.log HTMLDivElement {} at log (src/__tests__/index.text.js:12:11) console.log <div id="app-root"></div> at log (src/__tests__/index.text.js:13:11) console.log .my-embed at log (src/__tests__/index.text.js:14:11) ),另一个是由 new JSDOM() 全局注入的。 调用jest-environment-jsdom时,使用了JSDOM的隐式全局实例。然而,传入的所有对象都是由本地实例生成的。这是 JSDOM 不允许的——请参阅关于此问题的讨论。因此,实际上,问题不在于参数不是 new MutationObserver(),而在于它是来自错误 DOM 的 Node。要解决此问题,请确保所使用的 Node 来自与 DOM 节点相同的 JSDOM 实例。这可以通过将 MutationObserver 替换为 new MutationObserver() 来实现。这样做的缺点是你现在必须传递 JSDOM(或者至少是它的 new dom.window.MutationObserver())。或者,您可以在任何地方使用全局实例并通过其他方法设置其 HTML(例如 window 或 document.write())。不过,其可行性将取决于确切的用例。

回答 1 投票 0

列出HTMLElement类(或Html节点对象)的所有方法名称

如何获取Html节点实例/对象的HTMLElement类的所有方法名称列表 正如在 JSdom 安装的 Node js 上尝试 REPL 一样: $节点 欢迎使用 Node.js v21.6.0。 输入“.help”了解更多信息

回答 0 投票 0

如何使用 jest 测试 Web 组件(lit-element)

有人有一个很好的设置来使用 jest、jsdom 或类似工具测试自定义元素吗?我一直在使用 Puppeteer 和 Selenium,但它们使测试运行速度减慢太多。任何其他替代方案或修复...

回答 1 投票 0

单元测试因 .getContext() 未实现而引发错误

我正在使用 Jest 为使用画布元素的组件编写测试。当我运行如下所示的测试时,我不断收到错误。 错误:未实现:HTMLCanvasElement.prototype.getCont...

回答 8 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.