在测试角度项目时,我使用@angular-builders/jest
它是为了用玩笑来替换业力。有 2 个库我喜欢为玩笑获得额外的匹配器: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
现在我使用一个开玩笑扩展的匹配器添加一个测试。在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 并清除玩笑缓存
ng test --clearCache && ng test
我不喜欢这种解决方案,因为缓存旨在加快速度,并且当有许多规范文件时,每次清除缓存都会产生敏感影响。此外,我认为在手表模式下使用 jest 时不可能清除缓存
抱歉,有点长,谢谢你读到最后