使用 JSDom 在节点测试环境中正确接近“窗口”
Approaching "window" correctly in Node test environment with JSDom
我正在使用磁带和JSDom测试我的React应用程序,在每个测试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提供最终的脚本文件(就像你在普通浏览器中所做的那样)。另请参阅有关该实践的评论/线程。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 防止Iframe窗体在新窗口中打开
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调整窗口大小时,可拖动的对象会出现在容器外部
- Javascript排序的图像弹出窗口..可以't单独弹出
- 窗口大小html css
- 弹出窗口出现,然后退出
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- Javascript更新孙窗口中的表单元素
- 如何在选项卡上定义属性'的主窗口对象
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 召回窗口加载事件 - javascript
- 为什么不显示警报窗口
- 如何使用modalDialog来显示可以在所有浏览器中工作的弹出窗口
- Chrome应用程序调整窗口大小保持纵横比
- 新选项卡被弹出窗口阻止程序阻止
- 使用 JSDom 在节点测试环境中正确接近“窗口”
- 在弹出式原因窗口中显示PDF.很接近事实
- Rails 4模态窗口(弹出窗口):如何防止在选择下拉项时接近
- Webview:窗口.接近不工作