Angular 6单元测试:在afterAll中抛出错误\nReferenceError:找不到变量:$ thrown

73

当运行我的单元测试时,有时即使它们通过了,但在所有测试运行结束时,我仍会收到以下错误。

在我的 Jenkins CI 构建中运行 PhantomJS 时:

.PhantomJS 2.1.1 (Linux 0.0.0) ERROR
  {
    "message": "An error was thrown in afterAll\nReferenceError: Can't find variable: $ thrown",
    "str": "An error was thrown in afterAll\nReferenceError: Can't find variable: $ thrown"
  }

或者在 Chrome 上:

Chrome 67.0.3396 (Windows 7 0.0.0) ERROR
  {
    "message": "An error was thrown in afterAll\n[object ErrorEvent] thrown",
    "str": "An error was thrown in afterAll\n[object ErrorEvent] thrown"
  }

我也有非常不可靠的测试,有时什么都不改变,它们会成功,而其他时候相同的测试会失败,所以我知道一些奇怪的事情正在发生。

17个回答

1
在我的情况下:问题似乎是缺少“catch”。 而不仅仅是:

this.service.method().subscribe( r => { doSomething... } );

我需要做:

this.service.method().subscribe( r => { doSomething... }, err => { doSomething... } );

1
在我的情况下,使用以下系统: Angular 14 Linuxpuppeteer从2版本升级到18版本解决了问题。

0
在我的情况下,使用Jasmine,问题是我在测试的函数中抛出了一个错误。所以这个抛出的错误会出现在afterAll中。
this.userService.getUsers().subscribe(
  (data: User[]) => {
    if (data?.length === 0) {
      ...
    } else if (data?.length !== 0) {
      ...
    } else {
      throw new Error('Not valid response'); // This cause the error in afterAll if tested
    }
  }
);

0

我曾经遇到过这个问题,而这个问题帮助我解决了它。在我的情况下,是在没有任何方式测试处理异步代码的情况下订阅了it。更多信息请参见此处

因此,找到了处理订阅的方法,并且用fakeAsync进行包装有助于解决这个问题。


0

0
一旦打开运行单元测试的浏览器,激活开发工具并检查控制台是否有错误。这个简单的步骤指引了我正确的方向 :)

0

在我的情况下

我正在使用 karma-parallel,当我更新执行器数量时它可以工作(不知道为什么)

 parallelOptions: {
      executors: 4, // Earlier it was 5 I have updated it to 4 and it worked
      shardStrategy: 'round-robin',
      ......
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接