Jest 26 и Angular — неверно указаны номера строк ошибок

После обновления до Jest 26 и Angular 10 номера строк ошибок модульного теста отображаются неправильно. Я использую Jest с Angular 4 и обновляюсь с каждой новой версией.

Я прочитал все существующие статьи по этому поводу и испробовал все предложения, которые смог найти. Ни один из них не подходит для моей ситуации.

Мне удалось создать минимальное репо, в котором вы можете увидеть, как это происходит (https://github.com/russcarver/angular-jest-test/tree/jest-line-errors). Убедитесь, что вы находитесь на ветке jest-line-errors. Я добавил комментарии в файл app.component.spec.ts (https://github.com/russcarver/angular-jest-test/blob/jest-line-errors/src/app/app.component.spec.ts), чтобы показать проблемы.

Первый, как ни странно, заключается в том, что я должен добавить фиктивный тест в начало каждого файла спецификации. В противном случае первый тест всегда завершается неудачей в каждом файле:

it('Should init the Test Suite', noop); // ****** The first test fails unless I add this ******

Я создал это решение от отчаяния, когда ничего другое не работало. У меня есть подозрение, что это связано.

Это конкретное обновление Angular также рекомендовало разделить файл tsconfig.json на tsconfig.base.json, tsconfig.app.json и tsconfig.spec.json.

Когда я изменяю различные параметры в tsconfig.spec.json, номера строк ошибок меняются (в частности, с параметрами lib, module и target). Я сократил этот файл до минимума, который мне нужен для моего (большого) проекта, и изменил его в репозитории, чтобы НЕ расширять tsconfig.base.json. Я также изучил и установил параметры, которые, по моему мнению, лучше всего подходят для моего проекта (который нацелен на две последние версии Chrome, Edge Safari и FireFox и использует все последние функции JavaScript и TypeScript).

Я знаю, что это не проблема Angular, поскольку мне удалось воспроизвести это с Angular 9, 10 и 11. До всех изменений tsconfig он работал в Angular 9 и Jest 25.

Я также знаю (проверял), что это не связано с пустыми строками или комментариями в файлах спецификаций.

Я также пробовал конфигурацию Babel безрезультатно.

Раньше я использовал jest-preset-angular (который сейчас устарел), но добавление/удаление не имеет значения.

Неправильно сообщаются номера строк независимо от того, включено/запущено покрытие или нет.

Мы страдаем от этого с июля прошлого года (2020). Любая помощь будет принята с благодарностью!


person Russ    schedule 09.03.2021    source источник


Ответы (1)


Это кажется решенным после того, как я:

  1. Обновлен до Angular 12.0.5
  2. Обновлено до @types/jest: 26.0.23, @angular-builders/jest: 12.0.0, @types/jasmine: 3.7.7, @types/jasminewd2: 2.0.9, jasmine-core: 3.7.1, jasmine- spec-reporter: 7.0.0, jest: 26.6.3, ts-jest: 26.5.6 и ts-node: 10.0.0
  3. Я также удалил конфигурацию Babel.
  4. ПРИМЕЧАНИЕ. Я попытался перейти на Jest 27, и это был большой беспорядок.

Я не уверен, какие части отвечают за исправление, но вот мой файл package.json. Я рад предоставить другие файлы по запросу.

{
  "scripts": {
    "build": "npm run lint && npm run test-build && ng build --configuration=development",
    "build:dynamic": "npm run lint && npm run test-build && ng build --configuration=dynamic && npm run obfuscate",
    "lint": "ng lint",
    "ng": "ng",
    "obfuscate": "ng run resolver:obfuscate --configuration=production",
    "postinstall": "ngcc --tsconfig './tsconfig.app.json'",
    "refresh-project": "rimraf coverage/* && rimraf dist/* && rimraf node_modules/* && npm install",
    "start": "ng serve --host=0.0.0.0 --port 4200 --configuration=development",
    "start-dynamic": "ng serve --host=0.0.0.0 --port 4200 --configuration=dynamic",
    "test": "ng test -- --coverage --coverage-reporters=text-summary --coverage-reporters=lcov",
    "test-build": "ng test -- --coverage --coverage-reporters=text-summary --coverage-reporters=cobertura",
    "test-watch": "ng test -- --watch"
  },
  "private": true,
  "dependencies": {
    "@agm/core": "1.1.0",
    "@angular/animations": "12.0.5",
    "@angular/cdk": "12.0.5",
    "@angular/common": "12.0.5",
    "@angular/compiler": "12.0.5",
    "@angular/core": "12.0.5",
    "@angular/forms": "12.0.5",
    "@angular/material": "12.0.5",
    "@angular/platform-browser": "12.0.5",
    "@angular/platform-browser-dynamic": "12.0.5",
    "@angular/router": "12.0.5",
    "@auth0/angular-jwt": "5.0.2",
    "@google/markerclusterer": "2.0.9",
    "@material-extended/mde": "3.0.3",
    "@microsoft/applicationinsights-web": "2.6.3",
    "@microsoft/signalr": "5.0.7",
    "@okta/okta-angular": "3.1.0",
    "@srag/ngx-source-obfuscation": "2.0.0",
    "@types/file-saver": "2.0.2",
    "@types/googlemaps": "3.43.3",
    "@types/jest": "26.0.23",
    "@types/node": "14.17.3",
    "@types/sjcl": "1.0.29",
    "angular-user-idle": "2.2.6",
    "angulartics2": "10.0.0",
    "broadcast-channel": "3.7.0",
    "browser-globals": "0.0.2",
    "core-js": "3.10.0",
    "cross-env": "7.0.3",
    "date-fns": "2.22.1",
    "date-fns-tz": "1.1.4",
    "file-saver": "2.0.5",
    "gsap": "3.7.0",
    "hammerjs": "2.0.8",
    "kaop-ts": "4.3.0",
    "launchdarkly-js-client-sdk": "2.19.2",
    "ng2-file-upload": "1.4.0",
    "ngx-currency": "2.5.2",
    "ngx-mask": "12.0.0",
    "npm": "7.17.0",
    "rxjs": "6.6.7",
    "sass": "1.35.1",
    "save": "2.4.0",
    "sjcl": "1.0.8",
    "time-input-polyfill": "1.0.10",
    "web-animations-js": "2.3.2",
    "zone.js": "0.11.4"
  },
  "devDependencies": {
    "@angular-builders/jest": "12.0.0",
    "@angular-devkit/build-angular": "12.0.5",
    "@angular/cli": "12.0.5",
    "@angular/compiler-cli": "12.0.5",
    "@angular/language-service": "12.0.5",
    "@types/jasmine": "3.7.7",
    "@types/jasminewd2": "2.0.9",
    "codelyzer": "6.0.2",
    "crypto-browserify": "3.12.0",
    "jasmine-core": "3.7.1",
    "jasmine-spec-reporter": "7.0.0",
    "jest": "26.6.3",
    "jest-date-mock": "1.0.8",
    "jest-trx-results-processor": "2.2.0",
    "jest-zone-patch": "0.0.10",
    "rimraf": "3.0.2",
    "stream-browserify": "3.0.0",
    "ts-jest": "26.5.6",
    "ts-node": "10.0.0",
    "tslint": "6.1.3",
    "tslint-eslint-rules": "5.4.0",
    "typescript": "4.2.4",
    "webpack-bundle-analyzer": "4.4.2"
  },
  "engineStrict": true,
  "engines": {
    "node": "14.17.0",
    "npm": "7.17.0"
  }
}
person Russ    schedule 17.06.2021