Jest 26 和 Angular - 错误行号报告不正确

2024-01-31

自从升级到 Jest 26 和 Angular 10 以来,单元测试错误行号的报告不正确。我从 Angular 4 开始就一直使用 Jest,并且随着每个新版本的升级。

我已经阅读了所有关于此的现有文章,并尝试了我能找到的所有建议。它们似乎都不适合我的情况。

我已经能够创建一个最小的存储库,您可以在其中看到这种情况的发生(https://github.com/russcarver/angular-jest-test/tree/jest-line-errors 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 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 and target选项)。我已将此文件配对到我的(大型)项目所需的最低限度,并在存储库中对其进行了修改,以不扩展 tsconfig.base.json。我还研究并设置了我认为最适合我的项目的选项(它针对 Chrome、Edge Safari 和 FireFox 的最新 2 个版本,并使用所有最新的 JavaScript 和 TypeScript 功能)。

我知道这不是 Angular 问题,因为我已经能够使用 Angular 9、10 和 11 重现此问题。在所有 tsconfig 更改之前,它曾经在 Angular 9 和 Jest 25 中工作。

我还知道(已经测试过)它与规范文件中的空行或注释无关。

我也尝试过 Babel 配置,但无济于事。

我以前用过jest-preset-angular(现已弃用)但添加/删除没有区别。

无论是否启用/运行覆盖,都会错误地报告行号。

自去年 7 月(2020 年)以来,我们一直在遭受这种痛苦。任何帮助将不胜感激!


这似乎在我之后得到解决:

  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”,“茉莉花核心”:“3.7.1”,“茉莉花规格报告者”:“7.0.0”,“笑话”:“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"
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jest 26 和 Angular - 错误行号报告不正确 的相关文章

随机推荐

  • Mathematica 协助:使用 /。将方法替换为 IF[] 条件

    首先我要声明 我是一名 Mathematica 新手 这个问题可能很容易回答 但到目前为止 我在互联网上找不到任何针对这个特定问题的帮助 在这里 我基本上总结了我需要我的代码做什么 使用时出现一些问题 将命令替换为IF条件语句 基本上 我有
  • Sql Server 2008 - 换行符和全文查询

    我有一个数据库和一个全文索引表 我们称这张表为test 该表有一个名为testfield 现在 我们只插入一条记录 如下所示 insert into test values word Char 13 test 该查询插入一个带有LINE B
  • 如何选择 numpy 二维数组中唯一元素的所有位置及其周围的边界框?

    我有一个 2D numpy 数组 我想找到所有唯一元素的 每个 位置 我们可以使用以下方法找到独特的元素numpy unique numpyarray 这是棘手的部分 现在我必须知道每个独特元素的所有位置 让我们考虑以下示例 array 1
  • MySQL自动增量加上一列中的字母数字

    我是来自 Oracle 的 MySQL 新手 我需要创建一个表 其中主键位于一列中 但格式如下 X A注明原产国的信件 例如S对于西班牙来说 Z津巴布韦等 我们只有五个原籍国 YYYYMMDD 该格式的日期 9999 4 位办公代码 999
  • 奇怪的超时::控制器操作中的 render_to_string 和 HTTParty 出现错误

    在我的控制器操作中 我使用带有 jbuilder 模板的 render to string 来将 http post 操作的对象渲染到 API 此 API 调用的结果是控制器应该渲染的结果 但是在通过 render to string 渲染
  • Apache Commons Math 的标准差

    我正在使用 Apache Commons Math 计算向量的 SD 问题 我得到的值与手工得到的值不同 DescriptiveStatistics stats new DescriptiveStatistics stats addValu
  • iOS 10 iMessage 贴纸应用中 MSSticker Peels 的回调

    我正在 iOS 10 中尝试贴纸 iMessage 应用程序 但遇到了问题override func didStartSending message MSMessage conversation MSConversation 中的方法MSM
  • 数据绑定布局约束

    我在添加要查看的结束约束时遇到问题
  • Blazor 导航:更新 URL 而不更改重新加载页面

    我在应用程序中使用 URL 参数来表示页面状态 如何在不实际导航的情况下更改 URL Thanks 使用 Blazor 服务器端 您可以使用 JS Interop 来完成此操作并调用history pushState null url 这是
  • 禁用日期选择器弹出窗口中的过去日期

    我有下面的代码片段 其中有日期选择器控件
  • LinearLayoutManager.findFirstVisibleItemPosition() 返回 POSITION_NONE

    我正在尝试做这样的事情 RecyclerAdapter recyclerAdapter LinearLayoutManager recyclerManager set items recyclerAdapter notifyDataSetC
  • 在方向更改时保持列表片段选定项目的位置

    我在另一个片段的左侧有一个列表片段 本质上是标准的单击一个项目并更新右侧的片段模式 当他们单击列表片段中的一项时 他们正在选择新闻文章类别 我需要保留他们旋转设备时选择的任何一项 我怎么做 我当前的代码不起作用 我的代码如下 public
  • Django 1.7+ 相当于 South 的 add_ignored_fields() 是什么?

    回到 Django 的早期版本 我们都使用 South 进行迁移 并且由于它没有我们希望的那么智能 我们有时需要告诉它显式忽略某些字段 因为这些字段太复杂而无法处理 我们这样做是用add ignored fields一切都很顺利 在我们的例
  • 正确地从 DOM 中删除角度组件

    我创建了一个芯片组件 它有一个删除按钮 单击此按钮后 我想从 DOM 中删除整个组件 包括它的包装 HTML 标记 芯片组件 ts Component selector app chips template div class close
  • 在我的 Mac 上制作一个 C 启动器

    我想为我制作的 C 程序制作一个启动器 并且希望它在终端中运行 我该怎么做 我连一丁点的想法都没有 只需创建一个文本文件 将其保存到桌面 例如my C program command 注意 command后缀 然后在文本文件中您可以输入您喜
  • 从右到左的 UI 指南?

    我正在研究对专有 UI 框架 用于桌面应用程序 的 RTL 支持 我想知道 是否有关于如何更改小部件渲染的指南 我正在寻找诸如以下内容的列表 复选框标签位于复选框的左侧 并且右对齐 工具栏按钮从右向左流动 垂直滑块位于左侧 窗户装饰 一般布
  • 用于在 Google 电子表格中保存 URL 的书签

    我想创建一个简单的书签 它获取当前网页 location ref 的 URL 并将其保存在 Google 电子表格中 保存后 我想留在当前网页 我知道写入 Google 电子表格的唯一方法是使用 Google App Script 所以我写
  • JUnit 5 测试套件的 Surefire XML 测试报告

    我刚刚迁移到 JUnit 5 在我的测试套件的 XML 测试报告中看不到任何测试用例 我已经使用 junit platform suite 的新 JUnit 5 语法编写了测试套件 并且套件中的测试均成功运行 这将通过 Surefire 生
  • 为什么“初始化元素不是常量”......不再起作用?

    static const int a 42 static const int b a 我预计这样的代码会出现编译错误 初始值设定项必须是常量表达式或字符串文字 存储在具有以下类型的对象中的值int with const类型限定符不是常量表达
  • Jest 26 和 Angular - 错误行号报告不正确

    自从升级到 Jest 26 和 Angular 10 以来 单元测试错误行号的报告不正确 我从 Angular 4 开始就一直使用 Jest 并且随着每个新版本的升级 我已经阅读了所有关于此的现有文章 并尝试了我能找到的所有建议 它们似乎都