在 mocha 中,如何在执行另一个测试之前等待异步测试结束?

Posted

技术标签:

【中文标题】在 mocha 中,如何在执行另一个测试之前等待异步测试结束?【英文标题】:In mocha, How to wait for the end of an asynchronous test before executing another test? 【发布时间】:2020-06-22 14:50:09 【问题描述】:

在 mocha 中我有两个测试:

第一个测试异步方法是否获得应有的值: 第二个测试在获取值时,第一个方法是否“缓存”(我有一个内部机制)一个值,所以也是异步的。

所以在执行第二个测试之前,我需要确保我的第一个测试已完全完成(这意味着我的第一个获取值的异步方法已完全完成)。

这是我的代码:

it('Should return a valid value ', () => 
    myService.check('value', (success) => 
        expect(success.isValid)
    );
)
it('Should put the value in cache', () => 
    return myService.getCached('value').then(result => 
        expect(result).to.be.ok;
    )
)

问题是第二个“它”在第一个完成之前启动...

我可以使用超时,例如:

it('Should return a valid value ', () => 
    myService.check('value', (success) => 
        expect(success.isValid)
    );
).timeout(5000)
it('Should put the value in cache', () => 
    return myService.getCached('value').then(result => 
        expect(result).to.be.ok;
    )
)

但我不喜欢这样,它不是 100% 可靠的,我认为在两次测试之间我们不应该等待固定的时间值!

有没有更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

我会让你的测试是独立的和自我实现的。所以,如果你想测试你的缓存,你应该缓存该值并在缓存中检查该值,如下所示:

it('Should put the value in cache', () => 
    myService.check('value1', (success) => 
        return myService.getCached('value1').then(result => 
            expect(result).to.be.ok;
        )
    );

)

如果您依赖在此之前运行的其他测试,您是:

如果有人移动代码会遇到问题 如果之前的测试由于某种原因失败,就会遇到问题。您不希望通过其他测试的依赖

【讨论】:

为什么我没有想到这个? ^^ 这很简单而且效果很好,谢谢:)

以上是关于在 mocha 中,如何在执行另一个测试之前等待异步测试结束?的主要内容,如果未能解决你的问题,请参考以下文章

Mocha 测试用例不等待完成

Selenium:如何使 Web 驱动程序在执行另一个测试之前等待页面刷新

使用 Mocha 测试 Promise 时发生错误

如何让一个方法在继续执行之前等待另一个(异步)方法完成?

如何等待进程终止以在批处理文件中执行另一个进程

Mocha describe 生命周期