Jest的beforeEach,afterEach作用域以及deepEqual

beforeEach,afterEach等的作用域

Jest中,我们通常会用到beforeEach和afterEach的hooks。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
describe("level1", ()=>{
beforeEach(()=>{ console.log('before all in level 1') });
afterEach(()=>{ console.log('before all in level 1') });
describe("level2", () => {
beforeEach(()=>{ console.log('before all in level 2') });
afterEach(()=>{ console.log('before all in level 2') });
it("level3",()=>{})
it("level3",()=>{})
it("level3",()=>{})
})
describe("level2 again", () => {
beforeEach(()=>{ console.log('before all in level 2 again') });
afterEach(()=>{ console.log('before all in level 2 again') });
it("level3",()=>{})
it("level3",()=>{})
it("level3",()=>{})
})
}
}

曾经想当然以为,如上的例子,在每个it中,只会调用相应的level2的describe中的beforeEach,afterEach,其实大错特错,最外层的beforeEach和afterEach也是会在每个it前调用的。

因为这个浪费了不少时间,所以还是切记。

比较object的时候使用deepEqual

这个也是要注意的一点。比较基本类型的时候,使用assert.equal,其实equal相当于使用===进行比较,所以当我们比较内容同的两个Object,不能使用equal,而应该使用deepEqual。