javascript - 导出的函数未定义

标签 javascript typescript mocha.js babeljs commonjs

我在 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) 我可以看到它是未定义。我不知道为什么会发生这种情况。更奇怪的是,在调用 getSingleRouteConfigMock 的后续测试中,同一个 console.log 正确输出了该函数,这意味着它已被导出。

我摆弄了 Babel、Mocha 和 Typescript 配置,但没有成功。

这是 Babel 配置:

.babelrc

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

Mocha 配置:

mocha.opts

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

以及 Typescript 配置:

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",
  ...
}

最佳答案

我发现我有循环依赖。这就是为什么这不起作用。

关于javascript - 导出的函数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55259306/

相关文章:

angularjs - 将 mocha 的 async 'done' 函数与 Angular 的注入(inject)器一起使用

javascript - 使用 Javascript 创建棋盘

javascript - 为什么不内置类似框架的功能?

javascript - enzyme :如何测试浅层组件的交互

arrays - 在 Array Angular 和 Typescript 中查找最小和最大元素

node.js - 使用递归 glob 模式运行的 Mocha 不会在 Mac 上运行所有测试

javascript - 使用 Sinon : How do I test a variable inside of a Callback? 进行单元测试

typescript - 找不到 NgbModalBackdrop 的组件工厂。您是否将其添加到@NgModule.entryComponents?即使我将 EnteryComponent 添加到我的模块中

javascript - 以元组数组作为参数的函数,其中每个元组的第一个元素是第二个元组的父类型

javascript - 如何使用带有 createReadStream 函数的 mocha 链接测试?