单元测试没跑通过

在跑单元测试的时候遇到了这个问题, 控制台报错:
An error was thrown in afterAll
Uncaught undefined thrown

浏览器:

1.因为没有报错组件的地位,过后第一工夫想到的是,可能在某个单元测试afterAll()办法中,呈现了问题。于是用全局搜寻:afterAll。 然而并没有找到该关键字。

2.同时在mingao的电脑上,同样的代码,他那里跑单元测试并不会呈现该问题。 只有我这里以及机器人跑的时候有这个问题。

3.之后也去之前的我的项目中找了afterAll 关键字, 也没有找到。

4.谷歌之后,发现有人遇到和我一样的问题,只不过我的是undefind. 他的是object.



尝试一

显示第一的是一个100多赞的答案,他说申明了两个beforeEach, 会造成竞争状况,导致运行失败。所以他把两个beforeEach 合并成同步了。



先简略形容async。

async函数的实质就是返回了一个promise对象,在这个函数里里咱们加上await后,即便调用的是异步代码,它也会变成相似于同步,只有让这个异步代码执行完后,才会执行上面的同步代码来执行。



首先不说是否能解决问题。 实际上,合并与不合并,只是angular官网举荐的两种不同的设置:

离开设置:

组合设置:


所以这只是两种不同的写法。

我预计他只是,忘了写await了,导致两个beforeEach同步执行了。

钻研了一下这种办法,最终不起作用。


尝试二

第二个答案:

在单元测试中增加这个: 在每个单元测试后销毁夹具

 afterEach(() => {    fixture.destroy();  });




因为是跑全局单元测试时报的错,所以我并不知道在哪个单元测试中增加这个项。

好在目前组件并不算多,于是我挨个尝试了一下。

最初在menu.component组件中增加了该项后。单元测试没有再报错。

钻研起因
留神到该组件和别的中央不一样的是, 增加了teardown: { destroyAfterEach: false }

之前也介绍过:
angular13 新版本中每次测试的时候会清理DOM, 该项默认为true。 设置为false之后咱们能够在fit下, 察看到v层的变动。 否则看见的是空白。

所以我猜测是设置了destroyAfterEach: false 才导致的下面的报错。

于是我删除了teardown: { destroyAfterEach: false } 和
afterEach(() => {fixture.destroy();})

再进行测试。

后果和设想中的一样,没有报错。

所以论断进去了:目前应用 teardown: { destroyAfterEach: false }, 须要 同时应用afterEach(() => {fixture.destroy();}) 来销毁夹具。

但令我纳闷的是,其实之前只单单应用了destroyAfterEach: false, 过后并没有报错。 本文中的报错其实是在前几天才发现。 可能还受到其余的一些因素影响。