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