我无法正确配置 jest 来导入模块 (setupFilesAfterEnv)

2024-04-16

我在用@angular-builders/jest为了在测试 Angular 项目时用玩笑代替 karma。 我喜欢使用 2 个库来为笑话获取额外的匹配器:jest-extended and @testing-library/jest-dom.

我找不到自动导入匹配器的方法,这样我就不必在每个规范文件中导入它们。

重现问题的最小示例jest-extended

首先,创建一个 Angular 项目并安装 jest 依赖项

ng new --defaults my-project
cd my-project
yarn add -D jest @types/jest @angular-builders/jest jest-extended

然后编辑angular.json更换建造者

...
"test": {
    "builder": "@angular-builders/jest:run"
},

到目前为止,我可以使用 jest 和命令运行并通过测试

ng test

现在,我使用一个笑话扩展匹配器添加一个测试。在app.component.spec.ts:

...
  it('should work with jest-extended matchers', () => {
    expect([1, 1, 1]).toBeArrayOfSize(3);
  });

尝试#1

create jest.config.js

module.exports = {
  setupFilesAfterEnv: [
    'jest-extended',
  ],
};

不起作用,我收到错误TS2339: Property 'toBeArrayOfSize' does not exist on type 'ArrayLikeMatchers<number>'

尝试#2

使用中间安装文件;创造jest.config.js

module.exports = {
  setupFilesAfterEnv: [
    'my-jest-setup.ts',
  ],
};

with my-jest-setup.ts

import 'jest-extended'

作品!测试通过...但是一旦我更改了规范文件中的某些内容

...
  it('should work with jest-extended matchers', () => {
    expect([1, 1, 1]).toBeArrayOfSize(3);
    expect(true).toBeTruthy();
  });

并再次运行测试,我得到与尝试 #1 相同的错误。我怀疑缓存有问题

解决方法

使用尝试 #2 并在每次运行前清除 jest 缓存

ng test --clearCache && ng test

我不喜欢这个解决方案,因为缓存的目的是加快速度,当有很多规范文件时,每次清除缓存都会产生敏感的影响。此外,我认为在观看模式下使用 jest 时不可能清除缓存

抱歉,有点长,感谢您能读到最后


我终于找到了我认为正确的解决方案。从...开始使用 jest-extend 重现问题的最小示例,

  1. create jest.config.js文件(尝试1终于是一个好的开始)
module.exports = {
  setupFilesAfterEnv: [
    'jest-extended',
  ],
};
  1. edit tsconfig.spec.json并替换"types": ["jasmine", "node"] by "types": ["jest", "node", "jest-extended"]
{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./out-tsc/spec",
    "types": ["jest", "node", "jest-extended"] // <==== what was missing
  },
  "files": ["src/test.ts", "src/polyfills.ts"],
  "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
}

瞧。这实际上将包括jest and jest-extended编译中的声明文件。我现在获得了 TypeScript 类型检查和缓存速度改进的所有好处(显然,第一次运行除外)。

我希望这有帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我无法正确配置 jest 来导入模块 (setupFilesAfterEnv) 的相关文章

随机推荐