导出函数未定义
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 配置:
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",
...
}
我发现我有循环依赖。这就是为什么这不起作用。
此症状的另一个可能原因是,当您在生产模式下使用像 Parcel 这样的捆绑器时,模块中实际上缺少该功能,并且它会删除未使用的项目(在 中讨论的特定问题)。检查编译后的模块文件,确保名称存在
我在 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 配置:
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",
...
}
我发现我有循环依赖。这就是为什么这不起作用。
此症状的另一个可能原因是,当您在生产模式下使用像 Parcel 这样的捆绑器时,模块中实际上缺少该功能,并且它会删除未使用的项目(在