代码之家  ›  专栏  ›  技术社区  ›  tao

导入/导出在jest单元测试(vue2)中失败的外部类型

  •  0
  • tao  · 技术社区  · 3 年前

    我试图创建一个包,它导出我在多个项目中使用的一些类型、枚举、常量和接口。

    所以我创建了一个 main.ts 我将所有导出放在那里,在package.json中指定: "main": "main.ts" .

    我的一个出口需要一些 mapbox-gl 类型。所以我做了以下工作:

    "peerDependencies": {
      "mapbox-gl": "^1.13.0"
    },
    "devDependencies": {
      "@types/mapbox-gl": "^1.13.0",
    }
    

    在…内 主要.ts

    import mapboxgl from "mapbox-gl";
    
    export interface DataSourceOptions {
      shouldLoad?: boolean;
      name: string;
      map: mapboxgl.Map;
      layer: mapboxgl.Layer;
    }
    

    我发布了我的软件包,将其导入到我的项目中,并按预期工作。 直到我尝试使用这个包测试任何组件。

    D: \path\to\project\node\u modules\some custom package\main。ts:1 ({“Object.”:函数(module,exports,require,\uu dirname,\uu filename,global,jest){import mapboxgl from“mapbox gl”; 语法错误:无法在模块外使用import语句

    transformIgnorePatterns 属于 jest.config.js

    transformIgnorePatterns: [
      "<rootDir>/node_modules/(?!(@mapbox/mapbox-gl-draw" +
        "|some-custom-package" +
        ")/)",
    ],
    

    然而,我仍然看到同样的错误。

    rollup ,使用 tsc rollup-plugin-typescript2 插件,因为我知道 汇总 externals 地图框gl tsc公司 也没有 rollup-plugin-typescript2 似乎在声明我的接口,它们只声明 const s type enum s( possibly related

    我知道这看起来像是一个多问题,但我只是在寻找一个解决方案。

    • 要么解决jest在导入我的软件包时的问题(再说一次,我的软件在实际应用程序中运行得很好-它只在测试中失败)
    • 或者找到一种方法来保留接口,同时将我的导出与汇总和声明绑定在一起 地图框gl

    我看到的一个可能的解决方法是通过使我从中使用的类型动态化来绕过包中的mapboxgl导入:

    export interface DataSourceOptions<M,L> {
      shouldLoad?: boolean;
      name: string;
      map: M;
      layer: L;
    }
    

    在我的项目中: options: DataSourceOptions<mapboxgl.Map, mapboxgl.Layer> ,但公平地说,我真的不喜欢这个解决方案。它绕过了这个问题,但没有解决它。

    0 回复  |  直到 3 年前
        1
  •  0
  •   tao    3 年前

    我可以通过设置来修复它:

    "type": "module"
    

    在模块的 package.json transformIgnorePatterns 在里面 jest.config.js