【发布时间】:2019-12-17 21:49:38
【问题描述】:
我使用@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替换builder
...
"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 并在每次运行前清除 jest 缓存
ng test --clearCache && ng test
我不喜欢这种解决方案,因为缓存旨在加快处理速度,并且当有许多规范文件时,每次清除缓存都会产生敏感影响。此外,我认为在观看模式下使用 jest 时无法清除缓存
抱歉,有点长,谢谢你读到最后
【问题讨论】:
标签: angular typescript testing jestjs ts-jest