gpt4 book ai didi

angular - 我无法正确配置 jest 以导入模块 (setupFilesAfterEnv)

转载 作者:行者123 更新时间:2023-11-28 20:35:00 30 4
gpt4 key购买 nike

我正在使用 @angular-builders/jest为了在测试 Angular 项目时用 Jest 代替业力。有 2 个库我喜欢为开 Jest 获得额外的匹配器:jest-extended@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

现在,我使用一个 jest-extended 匹配器添加了一个测试。在 app.component.spec.ts :

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

尝试 #1

创建 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',
],
};

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

我不喜欢这个解决方案,因为缓存旨在加快速度,并且每次清除缓存都会在有很多规范文件时产生敏感影响。此外,我不认为在 watch 模式下使用 Jest 时可以清除缓存

抱歉,本文有点长,感谢您能看完

最佳答案

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

  1. 创建 jest.config.js 文件(尝试 1 终于有了一个好的开始)
module.exports = {
setupFilesAfterEnv: [
'jest-extended',
],
};
  1. 编辑 tsconfig.spec.json 并将 "types": ["jasmine", "node"] 替换为 "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"]
}

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

希望对你有帮助

关于angular - 我无法正确配置 jest 以导入模块 (setupFilesAfterEnv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57442151/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com