我在用@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 时不可能清除缓存
抱歉,有点长,感谢您能读到最后