Jest: spyOn监听某个方法期间,其他的test也调用该监听方法导致测试失败
待测试方法
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
以同步的方式执行?这样就不会存在问题了
多谢大咖~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
1、根据代码执行过程,监听是最开始执行的,随后是100ms的测试1,之后就是测试2里面调用a 200ms的sum.k(), 所以回调后toBeCalledTimes应该是等于2
2、为什么会这样不知道,是否因为settimeout的时间不够长
3、我觉得可以用async await去等待异步,对promise是有效的,但是对settimeout是否有效待测试