【问题标题】:How to find aliases in Global Jest setup?如何在 Global Jest 设置中查找别名?
【发布时间】:2021-04-05 02:03:03
【问题描述】:

我只想在所有测试用例之前运行一些东西。因此,我创建了一个全局函数,并在 jest 配置中指定了 globalSetup 字段:

globalSetup: path.resolve(srcPath, 'TestUtils', 'globalSetup.ts'),

但是,在 globalSetup 中,我使用了一些别名 @ 并且 Jest 抱怨它没有找到它们。

分类完别名后如何运行globalSetup

我的Jest配置如下:

module.exports = {
  rootDir: rootPath,
  coveragePathIgnorePatterns: ['/node_modules/'],
  preset: 'ts-jest',
  setupFiles: [path.resolve(__dirname, 'env.testing.ts')],
  setupFilesAfterEnv: [path.resolve(srcPath, 'TestUtils', 'testSetup.ts')],
  globalSetup: path.resolve(srcPath, 'TestUtils', 'globalSetup.ts'),
  globals: {},
  testEnvironment: 'node',
  moduleFileExtensions: ['js', 'ts', 'json'],
  moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/' })
};

当我在每次测试之前运行 testSetup 时,别名运行正常,但 globalSetup 不会发生这种情况。

有什么线索吗?

【问题讨论】:

标签: javascript typescript testing jestjs ts-jest


【解决方案1】:

不幸的是,我发现在这个问题上没有基于 cmets 的解决方案: https://github.com/facebook/jest/issues/6048

总结是 globalSetup 在 Jest 生态系统之外运行,因此它不会识别别名等。

有几种解决方法,例如,如果您的 npm run test 命令是这样的:

"test": "jest --config config/jest.config.js --detectOpenHandles --forceExit"

然后你可以这样做:

"test": "node whateverBeforeJest.js && jest --config config/jest.config.js --detectOpenHandles --forceExit"

【讨论】:

    【解决方案2】:

    我设法通过在我的 globalSetup 文件顶部包含 tsconfig-paths/register 来完成这项工作:

    // myGlobalSetupFile.ts
    
    import 'tsconfig-paths/register';
    import { Thing } from './place-with-aliases';
    
    export default async () => {
      await Thing.doGlobalSetup();
    }
    

    您必须确保在您的项目中安装了tsconfig-paths

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多