gpt4 book ai didi

node.js - mocha 单元测试中 Highchart 导入时出错

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:08 25 4
gpt4 key购买 nike

有人能够进行单元测试Highchartsmocha 。当我们部署代码时,一切都运行良好,但看起来可能无法加载 highcharts打包到浏览器之外。

我们的代码重现是 Typescript,因此我们使用 ts-node 转换为 commonJS,并使用 mocha 和 Domino 运行测试来伪造窗口/文档,我们用它来测试其他 React 组件。

具体来说,调用 import 的副作用会触发 TypeError:

import * as _Highcharts from 'highcharts';

这会触发此堆栈跟踪:

TypeError: Cannot set property 'hcTimezoneOffset' of undefined
at A (<MyPath>/node_modules/highcharts/highcharts.js:113:299)
at <MyPath>/node_modules/highcharts/highcharts.js:119:497
at <MyPath>/node_modules/highcharts/highcharts.js:119:502
at a (<MyPath>/node_modules/highcharts/highcharts.js:8:83)
at Object.<anonymous> (<MyPath>/node_modules/highcharts/highcharts.js:8:109)
at Module._compile (module.js:569:30)
at Module._extensions..js (module.js:580:10)
at Object.require.extensions.(anonymous function) [as .js] (<MyPath>/node_modules/ts-node/src/index.ts:373:14)

它引用了此代码片段。

    <MyPath>/node_modules/highcharts/highcharts.js:113
a.defaultOptions.global,k=q.moment;if(g.timezone){if(k)return function(a){return-k.tz(a,g.timezone).utcOffset()};a.error(25)}return g.useUTC&&g.getTimezoneOffset}function A(){var g=a.defaultOptions.global,u,h=g.useUTC,e=h?"getUTC":"get",n=h?"setUTC":"set";a.Date=u=g.Date||q.Date;u.hcTimezoneOffset=h&&g.timezoneOffset;u.hcGetTimezoneOffset=C();u.hcMakeTime=function(a,c,e,b,n,g){var d;h?(d=u.UTC.apply(0,arguments),d+=m(d)):d=(new u(a,c,k(e,1),k(b,0),k(n,0),k(g,0))).getTime();return d};F("Minutes Hours Day Date Month FullYear".split(" "),

该代码有点难以遵循精简版,但看起来根本原因是 a.defaultOptions.global 出于某种原因未定义。我正在进一步挖掘,但很好奇是否其他人也有类似的设置可以工作。我们的测试 Domino 窗口很可能混淆了 highcharts代码。

最佳答案

因此,通过解压缩 highcharts 代码,我找到了答案。失败的 block 就在这里。

var g = a.defaultOptions.global,
u, h = g.useUTC,
e = h ? "getUTC" : "get",
n = h ? "setUTC" : "set";
a.Date = u = g.Date || q.Date;
u.hcTimezoneOffset = h && g.timezoneOffset;

全局defaultOptions被初始化为这样,值得注意的是,没有设置日期键,也没有在我能看到的其他地方设置。

global: {
useUTC: !0,
VMLRadialGradientURL: "http://code.highcharts.com/5.0.12/gfx/vml-radial-gradient.png"
}

看起来它假设它将在 globalOptions 或 q.Date 中找到一个 Date 键,并且 q 设置为窗口。我们的多米诺骨牌窗口现在公开了一个 Date 方法来模仿 native 浏览器窗口。添加这一点似乎使一切顺利进行。但这并不是最直观的失败。

如果导入没有那么多副作用就好了。

关于node.js - mocha 单元测试中 Highchart 导入时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45041913/

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