待测试方法
const sum={
a(callback){
setTimeout(()=>{
this.k();
callback();
},200);
},
k(){
console.log(44)
}
}
export default sum
我想测试a
方法,测试思路:在a
回调函数中判断k
方法被调用的次数
测试代码
//测试1
test('100ms后调用k',()=>{
setTimeout(()=>{
sum.k();
},100)
})
//测试2
test('a():测试k被调用测试',(done)=>{
let k=jest.spyOn(sum,'k');
sum.a(()=>{
expect(k).toBeCalledTimes(1)
done();
})
})
运行结果
问题
- 那么是否结果证明
测试2
在监控k
方法期间,如果其他测试也调用了k
,也会被记录,所以被调用了2次,导致测试不通过? - 但是如果我把
测试1
和测试2
调换顺序又是ok的,为啥? - 有没有方法能让
测试1
和测试2
以同步的方式执行?这样就不会存在问题了
多谢大咖~
1、根据代码执行过程,监听是最开始执行的,随后是100ms的测试1,之后就是测试2里面调用a 200ms的sum.k(), 所以回调后toBeCalledTimes应该是等于2
2、为什么会这样不知道,是否因为settimeout的时间不够长
3、我觉得可以用async await去等待异步,对promise是有效的,但是对settimeout是否有效待测试