单元测试没跑通过
在跑单元测试的时候遇到了这个问题,控制台报错:
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, 过后并没有报错。本文中的报错其实是在前几天才发现。可能还受到其余的一些因素影响。