在开玩笑的单元测试角度显示正确的错误

Posted

技术标签:

【中文标题】在开玩笑的单元测试角度显示正确的错误【英文标题】:show correct error in jest unit test angular 【发布时间】:2021-01-01 01:21:27 【问题描述】:

我正在 NX 角度工作区中编写单元测试。有时它会给出这样的错误:

(node:15320) UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Object'
    |     property 'element' -> object with constructor 'Object'
    |     property 'componentProvider' -> object with constructor 'Object'
    --- property 'parent' closes the circle
    at stringify (<anonymous>)
    at writeChannelMessage (internal/child_process/serialization.js:117:20)
    at process.target._send (internal/child_process.js:779:17)
    at process.target.send (internal/child_process.js:677:19)
    at reportSuccess (C:\Users\INFINTY\angular\nfx__1-sep\node_modules\jest-runner\node_modules\jest-worker\build\workers\processChild.js:67:11)
(node:15320) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:15320) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

它没有显示确切的错误。我知道 jasmine/karma 中有一个命令强制测试以显示正确的错误,但我忘记了。谁能帮助我,我怎样才能在 jest/cypress 中得到确切的错误。

【问题讨论】:

遇到同样的错误,到目前为止还没有找到解决方案。 @george,。这个错误基本上是spec.ts中的一些其他错误。注释 spec 文件中的所有代码,然后逐行取消注释。 正确。在我的情况下,这个错误是通过在我的测试模块中从ngrx 导入EffectsModule.forRoot() 引起的 我见过很多人报告此错误,并且每个人都将其归因于一件事或另一件事,根据我的观察,这实际上似乎是 Jest 记者中的某种竞争条件导致间歇性错误跨度> 我已将此问题添加到 NX 问题列表中:github.com/nrwl/nx/issues/3973 - 因为这开始于 @nrwl/workspace 的最新更新(与 JEST 26 相关) 【参考方案1】:

在我的应用程序中,只需将HttpClientModule 导入测试文件(HttpClient 正在该组件中使用):

import  HttpClientModule  from '@angular/common/http';

describe('AppComponent', () => 
    beforeEach(async () => 
        await TestBed.configureTestingModule(
            imports: [HttpClientModule, RouterTestingModule],
            declarations: [AppComponent],
        ).compileComponents();
    );
);

我正在使用:

角10.1.4 开玩笑 26.6.0 开玩笑预设角度 8.3.1

【讨论】:

谢谢!那真是一个鬼鬼祟祟的……我的组件没有使用 HttpClient,但它使用的是 ngrx-translate 和角度路由器。我猜其中之一需要 HttpClient。无论如何,它修复了它。 不幸的是我运气不好:( 查看此答案以获取有关如何显示正确消息的提示:***.com/questions/54874414/…【参考方案2】:

这个带有松弛描述的错误仅在使用 nx test 执行时发生(在我的情况下)并且它按顺序执行测试并且不显示最详细的错误(因为存在)。

在我的情况下,我所做的是专门使用指定的配置文件对特定文件运行笑话,如下所示:

npx jest app.component.spec.ts --config=apps/my-app/jest.config.js

所以这个问题更具描述性,我处理了它来解决它。

注意:记得先安装 jest -global。

【讨论】:

以上是关于在开玩笑的单元测试角度显示正确的错误的主要内容,如果未能解决你的问题,请参考以下文章

开玩笑单元测试返回“MongoError:拓扑被破坏”

开玩笑的单元测试不会等待 axios 响应

开玩笑地编写单元测试时会出现特定错误

如果调用 super() 则开玩笑的单元测试

TypeError:state.customerComplaints.add 不是开玩笑单元测试中的函数

next-i18next 单元测试错误“无法读取未定义的属性语言”,带有链接和玩笑