Ser*_*eni 2 testing typescript jestjs angular ts-jest
我使用它是@angular-builders/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
Run Code Online (Sandbox Code Playgroud)
然后编辑angular.json以替换构建器
...
"test": {
"builder": "@angular-builders/jest:run"
},
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以使用 jest 和命令运行并通过测试
...
"test": {
"builder": "@angular-builders/jest:run"
},
Run Code Online (Sandbox Code Playgroud)
现在,我使用一个笑话扩展匹配器添加一个测试。在app.component.spec.ts:
...
it('should work with jest-extended matchers', () => {
expect([1, 1, 1]).toBeArrayOfSize(3);
});
Run Code Online (Sandbox Code Playgroud)
尝试#1
创造jest.config.js
ng test
Run Code Online (Sandbox Code Playgroud)
不起作用,我收到错误TS2339: Property 'toBeArrayOfSize' does not exist on type 'ArrayLikeMatchers<number>'
尝试#2
使用中间安装文件;创造jest.config.js
...
it('should work with jest-extended matchers', () => {
expect([1, 1, 1]).toBeArrayOfSize(3);
});
Run Code Online (Sandbox Code Playgroud)
和my-jest-setup.ts
import 'jest-extended'
Run Code Online (Sandbox Code Playgroud)
作品!测试通过...但是一旦我更改了规范文件中的某些内容
...
it('should work with jest-extended matchers', () => {
expect([1, 1, 1]).toBeArrayOfSize(3);
expect(true).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)
并再次运行测试,我得到与尝试 #1 相同的错误。我怀疑缓存有问题
解决方法
使用尝试 #2 并在每次运行前清除 jest 缓存
ng test --clearCache && ng test
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个解决方案,因为缓存的目的是加快速度,当有很多规范文件时,每次清除缓存都会产生敏感的影响。此外,我认为在观看模式下使用 jest 时不可能清除缓存
抱歉,有点长,感谢您能读到最后
我终于找到了我认为正确的解决方案。从最小的例子开始,用 jest-extend 重现问题,
\n\njest.config.js文件(尝试 1 终于是一个好的开始)module.exports = {\n setupFilesAfterEnv: [\n \'jest-extended\',\n ],\n};\nRun Code Online (Sandbox Code Playgroud)\n\ntsconfig.spec.json并替换"types": ["jasmine", "node"]为"types": ["jest", "node", "jest-extended"]{\n "extends": "./tsconfig.json",\n "compilerOptions": {\n "outDir": "./out-tsc/spec",\n "types": ["jest", "node", "jest-extended"] // <==== what was missing\n },\n "files": ["src/test.ts", "src/polyfills.ts"],\n "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]\n}\n\nRun Code Online (Sandbox Code Playgroud)\n\n并瞧\xc3\xa0。这实际上将在编译中包含jest和jest-extended声明文件。我现在获得了 TypeScript 类型检查和缓存速度改进的所有好处(显然,第一次运行除外)。
我希望这有帮助
\n| 归档时间: |
|
| 查看次数: |
8374 次 |
| 最近记录: |