Jest: spyOn监听某个方法期间,其他的test也调用该监听方法导致测试失败

发布于 2022-09-11 16:28:04 字数 980 浏览 11 评论 0

待测试方法

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();
    })
})

运行结果

clipboard.png

问题

  1. 那么是否结果证明测试2在监控k方法期间,如果其他测试也调用了k,也会被记录,所以被调用了2次,导致测试不通过?
  2. 但是如果我把测试1测试2调换顺序又是ok的,为啥?
  3. 有没有方法能让测试1测试2以同步的方式执行?这样就不会存在问题了

多谢大咖~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生生漫 2022-09-18 16:28:04

1、根据代码执行过程,监听是最开始执行的,随后是100ms的测试1,之后就是测试2里面调用a 200ms的sum.k(), 所以回调后toBeCalledTimes应该是等于2
2、为什么会这样不知道,是否因为settimeout的时间不够长
3、我觉得可以用async await去等待异步,对promise是有效的,但是对settimeout是否有效待测试

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文