在节点中 运行 时导入 Leaflet 和 Leaflet-Providers 时出错

Error importing Leaflet and Leaflet-Providers when run in node

我正在 运行使用 es6 模块使用 tape + babel-register 在传单应用程序上进行单元测试,我得到了

ReferenceError: L is not defined

in leaflet-providers.js 在我正在测试的模块中导入 leaflet 和 leaflet-providers 时。

testfile.js

import L from 'leaflet';
import { provider } from 'leaflet-providers';

我不完全确定我的语法对于使用 es6 模块导入传单插件是正确的,但它在浏览器中对我有用,并且只有当我 运行 通过节点进行单元测试时才不起作用。

为什么leaflet-providers在运行通过节点时找不到L?

在浏览器中,Leaflet 附加到 window 对象,Node 没有。此外,由于一切都是模块,因此范围仅限于文件级别。 Node 确实有一个 global 对象,尽管它是 window 的伪等价物,但有一些差异。

您可能还需要像 jsdom 这样的东西来提供一个 window 对象供传单提供者与之交互。

我使用 Mocha,但以下内容没有给我任何错误并将提供程序函数附加到 L.tileLayer.providers

脚本

"mocha": "mocha ./test/index.js -r jsdom-global/register

index.js

 global.L = require('leaflet');
 require('leaflet-providers');

我的 jsdom 包是 jsdomjsdom-global