gpt4 book ai didi

javascript - 使用 JSDom 在 Node 测试环境中正确接近 "window"

转载 作者:行者123 更新时间:2023-11-28 20:40:25 27 4
gpt4 key购买 nike

我正在使用 Tape 测试我的 React 应用程序和 JSDom,在每个测试 JS 文件的顶部导入以下模块:

import jsdom from 'jsdom'

function setupDom() {
if (typeof document === 'undefined') {
global.document = jsdom.jsdom('<html><body></body></html>');
global.window = document.defaultView;
global.navigator = window.navigator;
global.WebSocket = function(){};
}
}

setupDom();

但是,在我的一个 React 组件中,我导入了一个 pathseg polyfill像这样:

import 'pathseg'

但是,当我运行测试时,我收到此错误:

    SVGPathSeg.prototype.classname = "SVGPathSeg";
^

ReferenceError: SVGPathSeg is not defined

如果我找到错误的根源(在 polyfill 中),我会看到:

(function() { "use strict";
if (!("SVGPathSeg" in window)) {
// Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg
window.SVGPathSeg = function(type, typeAsLetter, owningPathSegList) {
this.pathSegType = type;
this.pathSegTypeAsLetter = typeAsLetter;
this._owningPathSegList = owningPathSegList;
}

SVGPathSeg.prototype.classname = "SVGPathSeg";

我的问题是,我该如何解决这个问题,以及我能否以不同的方式处理我的测试设置以避免将来出现这种情况?

最佳答案

您的测试设置不应将窗口属性粘在全局中。 jsdom 理论上可以处理这种情况 - 如果您正确使用它:

您应该向 jsdom 提供一个完整的测试包,就像您也在浏览器中进行测试一样。这通常意味着您必须浏览测试,然后将最终脚本文件提供给 jsdom(就像您在普通浏览器中所做的那样)。另见 this对该做法的评论/主题。

关于javascript - 使用 JSDom 在 Node 测试环境中正确接近 "window",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36010113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com