如何仅通过一个 Jest 配置文件/设置使用多个 Jest 预设?

Posted

技术标签:

【中文标题】如何仅通过一个 Jest 配置文件/设置使用多个 Jest 预设?【英文标题】:How to use multiple Jest presets with only one Jest configuration file/setup? 【发布时间】:2019-11-20 21:56:09 【问题描述】:

我正在处理的一个项目已经配置了 Jest,并且测试工作正常。这就是当前jest.config.js 文件的样子;

const ignores = [...];
const coverageIgnores = [...];

module.exports = 
  roots: ['<rootDir>/src'],
  globals: 
    'ts-jest': 
      tsConfig: 'tsconfig.json',
    ,
  ,
  moduleFileExtensions: ['js', 'json', 'ts'],
  testPathIgnorePatterns: [...ignores],
  coveragePathIgnorePatterns: [...ignores, ...coverageIgnores],
  testEnvironment: 'node',
  coverageThreshold: 
    global: 
      branches: 86,
      functions: 75,
      lines: 86,
      statements: 86,
    ,
  ,
  preset: 'ts-jest',
;

配置当前使用ts-jest 预设。该项目还涉及应测试的 DynamoDB 实例,这就是多个预设发挥作用的地方。当前预设 ts-jest 应与 @shelf/jest-dynamodb-preset (https://jestjs.io/docs/en/dynamodb) 结合使用。问题是config里的preset属性是String类型,不支持数组和对象。

我读过一些类似的问题,比如这个; Is it possible to use Jest with multiple presets at the same time?,但是像这样的问题似乎没有关于如何解决这个问题的明确可行的解决方案。

其他人提出了一种解决方案,其中为每个预设创建单独的 Jest 配置,但这是我不想要的,将来可能会导致更多问题。

最好修改这个单一的配置文件以允许多个(这里是 2 个)预设,但是如何实现呢?

【问题讨论】:

到目前为止你找到解决办法了吗? 不,我没有,似乎没有记录如何执行此操作。我也不再处理这个问题,因为我不再从事那个项目了。 【参考方案1】:

您实际上不能使用两个预设,但由于shelf/jest-dynamodb 的预设只是在开玩笑设置中设置其他选项,您可以自己调用它们。我可以通过添加到 package.json 的“jest”部分来做到这一点:

"globalSetup": "./node_modules/@shelf/jest-dynamodb/setup.js",
"globalTeardown": "./node_modules/@shelf/jest-dynamodb/teardown.js",

这会进行与预设相同的调用,这意味着您可以将预设留给 ts-jest

【讨论】:

您能详细说明一下吗?网上有文学 0 的信息,说为什么你不能有多个预设。你会如何把 ts-jest 和其他礼物放在一起? ***.com/questions/51002460/… 这很有用

以上是关于如何仅通过一个 Jest 配置文件/设置使用多个 Jest 预设?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Promise.all 使用 jest 为多个提取设置测试

如何仅从特定文件夹运行 Jest 测试而忽略其他文件夹测试?

使用 .ts 文件 (TypeScript) 配置 Jest 全局测试设置

如何在多个文件中运行 Jest-Puppeteer 测试

指定 jest 测试文件目录

一个文件中的测试是不是在 Jest 中并行运行?