angular - Cómo usar jest.mock después de que @types/jest se elimina (^jest@24)
Recientemente actualicé @angular-builders/jest de la versión 7 a la 8. En la guía de migración se indica que debo eliminar @types/jest porque ahora viene incluido con Jest v24. (También actualicé mi tsconfig)
Hasta ahora todo bien.
Pero ahora mis pruebas fallan con
error TS2304: Cannot find name 'jest'.
jest.mock('src/app/omitted');
error TS2304: Cannot find name 'jest'.
jest.clearAllMocks();
Y VS Code no tendrá nada que ver con la variable global de jest. Lo cual tiene cierto sentido ya que eliminé typeRoots de mi tsconfig como debería según la guía de migración.
En tsconfig.json (directorio raíz, usado por el IDE):
Eliminar el array typeRoots
Nuevamente, dado que las definiciones de tipo de Jest están empaquetadas dentro del paquete jest y no se encuentran bajo node_modules/@types, no querrás que las raíces de tipos se limiten a una carpeta específica.
¿Pero qué pasa? La guía de migración dice que debería eliminar @types/jest, pero ¿cómo hago para que funcione bien con jest.mock y jest.clearAllMocks de nuevo?
Intenté:
import { mock } from 'jest'; // mock isn't found
import * as jest from 'jest'; // jest.mock isn't found
Por favor, aconseje.
Aquí están mis configuraciones (igual que en el ejemplo de la aplicación simple)
paquetes de desarrollo relevantes
{
"@angular-builders/jest": "^8.0.3",
"jest": "^24.8.0",
"jest-preset-angular": "^7.1.1",
"ts-jest": "^24.0.2",
}
tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "esnext",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"target": "es2015",
"lib": ["es2018", "dom"],
"strict": true // note strict mode
}
}
tsconfig.spec.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"allowJs": true
},
"files": ["src/polyfills.ts"],
"include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
}
angular.json
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"my-project": {
//...
"architect": {
//...
"test": {
"builder": "@angular-builders/jest:run",
"options": {}
}
}
}
}
}
Respuesta #1
Al parecer, @types/jest todavía es necesario. La guía de migración se ha ajustado para reflejar esto.
Las configuraciones se ven así ahora:
package.json
"@angular-builders/jest": "^8.0.3",
"@types/jest": "^24.0.15",
"jest": "^24.8.0",
"jest-preset-angular": "^7.1.1",
"ts-jest": "^24.0.2",
tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "esnext",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"target": "es2015",
"lib": ["es2018", "dom"],
"types": ["jest"],
"strict": true // note strict mode, this isn't default
}
}
tsconfig.spec.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec"
},
"files": ["src/polyfills.ts"],
"include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
}
