【问题标题】:Jest/Typescript: Importing a File Breaks Import in Another FileJest/Typescript:导入文件会中断导入另一个文件
【发布时间】:2019-11-21 11:10:07
【问题描述】:

我的单元测试和 Jest 遇到了一个奇怪的问题,我不知道如何解决。当我在file2.ts 中导入文件时,file1.ts 中相同文件的导入变为undefined。应用程序构建并运行,但单元测试不再起作用,并在file1.ts 中抛出以下错误:

TypeError: Cannot read property 'getModel' of undefined

这是代码:

file1.ts

import users from '../users';

const model = users.getModel();

...

file2.ts

import users from '../../users';

const model = users.getModel();

...

users.ts

export class User {
  getModel() {
    ...
  }
}

export default new User();

file2.ts 的单元测试会引发上述file1.ts 的错误,即使我只是专门为file2.ts 运行单元测试。

如果我在file2.ts 中注释掉const model = users.getModel();,则不会引发错误。

这是我的tsconfig.json 和我的jest.config.js 文件:

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "pretty": true,
    "sourceMap": false,
    "target": "es6",
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "allowJs": true,
    "outDir": "./dist",
    "baseUrl": "./src"
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "dist",
    "node_modules",
    "**/*.spec.ts"
  ]
}

jest.config.js

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  collectCoverage: true,
  coverageDirectory: './test-coverage'
};

有什么想法吗?

【问题讨论】:

    标签: typescript jestjs


    【解决方案1】:

    您可能有循环依赖,但我无法从您发布的截断示例代码中看出。但是由于竞争条件,循环 deps 可能会导致导入显示为未定义。您可以使用eslint-plugin-import/no-cycle 规则检查循环依赖,然后将它们从代码库中重构出来。

    【讨论】:

    • 感谢您的建议!我不认为我有循环依赖,但我还是安装并运行了 eslint 插件只是为了确保。不幸的是,它证实了我没有。这可能是一个相当容易解决的问题。
    • 这不是循环导入,而是其他地方的竞争条件。感谢您的建议!
    • 酷!很高兴能帮上忙?
    猜你喜欢
    • 2014-09-05
    • 2021-03-21
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多