在节点中 运行 时导入 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 包是 jsdom
和 jsdom-global
我正在 运行使用 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 包是 jsdom
和 jsdom-global