Как использовать jest.mock после удаления @ types / jest (^ jest @ 24) - PullRequest
1 голос
/ 19 июня 2019

Я недавно обновил @angular-builders/jest с 7 до 8. В руководстве по миграции указано, что мне следует удалить @types/jest, поскольку теперь он поставляется с Jest v24.(Я также обновил свой tsconfig )

Пока все хорошо.

Но теперь мои тесты не проходят с

error TS2304: Cannot find name 'jest'.

jest.mock('src/app/omitted');

error TS2304: Cannot find name 'jest'.

jest.clearAllMocks();

И VS Code будет иметьничего общего с шуткой глобальной переменной.Какой вид имеет смысл, когда я удаляю typeRoots из моего tsconfig, как я должен, согласно руководству по миграции.

В tsconfig.json (корневой каталог, используемый в IDE):

RemoveМассив typeRoots

Опять же, поскольку Jest-наборы упакованы в jest-пакет и не находятся в node_modules / @ types, вы не хотите, чтобы корни типов были ограничены определенной папкой.

а что дает?В руководстве по миграции сказано, что я должен удалить @types/jest, но как мне заставить его играть с jest.mock и jest.clearAllMocks снова?

Я пытался:

import { mock } from 'jest'; // mock isn't found
import * as jest from 'jest'; // jest.mock isn't found

Пожалуйста, совет.

Вот мои конфиги (такие же как пример простого приложения )

соответствующие пакеты разработчика

{
    "@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": {}
        }
      }
    }
  }
}

1 Ответ

0 голосов
/ 24 июня 2019

@types/jest очевидно все еще необходимо . руководство по миграции было скорректировано с учетом этого.

Конфиги теперь выглядят так:

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"]
}
...