簡體   English   中英

導出的函數未定義

[英]Exported function is undefined

我在 Typescript 中遇到了 Mocha 測試的問題,我擔心它與 Babel 有關,但我真的不確定發生了什么。

本質上,我有一個正在導出到文件中的函數

// src/my-ts-lib/tests/components/factoryMocks/componentConfigMocks.ts

...

export function getRandomConfig(type?: string): ComponentConfig {
  const randomComponentType = type || randomType();
  return {
    type: randomComponentType,
    config: configLibrary[randomComponentType]
  }
}

並被導入到另一個被測試調用的地方:

// src/my-ts-lib/tests/components/RouteComponent/mocks/routeMocks.ts

...

import { getRandomConfig } from '../../factoryMocks/componentConfigMocks';

..

export const getSingleRouteConfigMock = (componentType?: string): RouteProps => {
  const defaultComponentType = 'PageLayout';
  return {
    childComponent: {
      type: componentType || defaultComponentType,
      config: getRandomConfig(componentType || defaultComponentType)
    },
    pageName: randomString(),
    path: randomString(),
  };
};

...

運行測試時,我收到以下錯誤:

RouteCompnent/mocks/routeMocks.ts:10
      config: getRandomConfig(componentType || defaultComponentType),
                                           ^
TypeError: componentConfigMocks_1.getRandomConfig is not a function
    at Object.exports.getSingleRouteConfigMock (/Users/.../routeMocks.ts:10:44)

如果我評論調用和console.log(getRandomConfig)我可以看到它是undefined 我不知道為什么會這樣。 更奇怪的是,在調用getSingleRouteConfigMock后續測試中,這個相同的console.log正確輸出了函數,這意味着它已經被導出了。

我擺弄過 Babel、Mocha 和 Typescript 配置,但沒有成功。

這是 Babel 配置:

.babelrc

{
  "presets": ["@babel/preset-env", "@babel/preset-react"]
}

摩卡配置:

mocha.opts

--require ts-node/register
--watch-extensions ts tsx
--require source-map-support/register
--recursive
--require @babel/register
--require @babel/polyfill
src/**/*.spec.**

和打字稿配置:

tsconfig.json

{
   "compilerOptions": {
     "outDir": "./dist/",
     "sourceMap": true,
     "noImplicitAny": false,
     "module": "commonjs",
     "target": "es6",
     "jsx": "react"
   },
   "include": [
     "./src/**/*"
   ],
   "exclude": [
     "./src/**/*.spec.ts",
     "./src/my-ts-lib/components/**/*.spec.tsx",
     "./src/my-ts-lib/test-helpers/*"
   ],
 }

以及package.json的相關部分

...
"dependencies": {
  ...
  "@babel/polyfill": "7.2.x",
  ...
},
"devDependencies": {
  "@babel/core": "7.2.x",
  "@babel/preset-env": "7.2.x",
  "@babel/preset-react": "7.0.x",
  "@babel/register": "7.0.x",
  "babel-loader": "8.x",
  "mocha": "3.2.x",
  ...
}

我發現我有一個循環依賴。 這就是為什么它不起作用。

此症狀的另一個可能原因是,當您在生產模式下使用像 Parcel 這樣的打包器時,模塊中實際上缺少該函數,它會刪除未使用的項目(在使用 Parcel JS 2 構建時的空 Javascript 文件中討論的特定問題)。 檢查編譯的模塊文件並確保名稱存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM