【问题标题】:Cannot find name 'async' when testing Angular 11 with jest用玩笑测试 Angular 11 时找不到名称“异步”
【发布时间】:2021-03-14 12:30:00
【问题描述】:

我正在尝试使用 jest 编写 Angular 测试:

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [BookListComponent],
    }).compileComponents();
  }));

当我启动时:

npm run test:watch 

我收到了这个错误:

错误 TS2304:C annot find name 'async'。

【问题讨论】:

  • 应该是导入的。

标签: angular typescript jestjs


【解决方案1】:

async 不是函数。试试这样:

beforeEach(async () => {
    await TestBed.configureTestingModule({
      declarations: [BookListComponent],
    }).compileComponents();
  });

我不确定您是否甚至需要将该函数标记为异步,因为您没有在 before each 中使用 await。

看看documentation

【讨论】:

  • 谢谢,这不是写代码,我认为 Angular 11 中不再使用异步
【解决方案2】:

您必须在 Angular 11 中将 async 更改为 waitForAsync,因为他们更改了它。他们更改了它,因为您在以前的版本中从 @angular/core/testing 导入的 async 类似于 JavaScript 的原生 async,可能会导致混淆。

import { waitForAsync } from '@angular/core/testing';
.....
beforeEach(waitForAsync(() => {
    TestBed.configureTestingModule({
      declarations: [BookListComponent],
    }).compileComponents();
  }));

waitForAsync 的链接。

【讨论】:

  • 谢谢,现在我试图理解为什么异步被 waitForAsync 取代
  • 如果您仍然想知道,这个答案解释了它:stackoverflow.com/a/64704028/7365461
  • "在 Angular 10.1.0 中,waitForAsync() 已取代 async() 以避免混淆,但在其他方面完全相同。您看到的任何讨论使用 async() 的文档也适用于 waitForAsync( ). async() 已被标记为已弃用,并将在版本 12 中完全删除。”好的,非常感谢
  • 我现在明白为什么我的同事警告我要使用 angular。我花了最后一个小时试图找到等待异步的正确方法,我找到了async () => function,我找到了async(() => function),我找到了injectAsync,最后我找到了waitForAsync。诚实的问题:您如何跟踪这些变化?
  • @Samuel blog.ninja-squad.com/2020/09/03/what-is-new-angular-10.1 我想你可以看看博客或 Angular 本身的文档。 TypeScript 的美妙之处在于它会告诉你异步被标记为弃用或异步无法导入,然后你将研究 Angular 测试中异步发生了什么,并且很可能会发现它被删除以等待 ForAsync。不幸的是(或者也可能是幸运的)大多数 JavaScript 框架都会经历这样的变化。
猜你喜欢
  • 2021-01-01
  • 2018-02-22
  • 1970-01-01
  • 2019-12-28
  • 2022-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 2019-01-18
相关资源
最近更新 更多