"before" 钩子在 Mocha 单元测试中有什么意义?

What's the point of "before" hook in unit testing with Mocha?

这两个不一样吗?

// ONE
describe('something', () => {
    const someConst = 'yes'

    it('should do something', () => {
        // doing something
    })

    it('should do something else', () => {
        // doing something else
    })

})

// TWO
describe('something', () => {
    let someNotConst
    before(() => {
       someNotConst = 'yes'
    })

    it('should do something', () => {
        // doing something
    })

    it('should do something else', () => {
        // doing something else
    })
})

这是一个人为的例子,用来说明我在一般层面上的意思。

我的猜测很简单:在第一种情况下,您阻塞了线程。在第二种情况下,您可以利用 promises(和 async/await)来轻松地进行异步操作:)

另一件重要的事情是,Mocha 可以决定在初始化测试和 运行ning 之间做一些事情,或者甚至在初始化之前做一些事情。这在未来的版本中可能对兼容性很重要。

最后,它们还提供对扩展错误处理的支持,以便您可以更快地发现问题并更快地解决问题。


能否详细说明一下"blocking the thread"是什么意思?

阻塞线程意味着您强制引擎同步执行操作,一个操作接一个操作。如果你有两个冗长的操作,比如读取一个大文件和初始化一个数据库,你必须一个接一个地做,浪费时间。

在另一种情况下,你可以做这样的事情,这将 运行 它们并行并在开始测试之前等待两个操作:

before(() => {
    let p1 = readEnormousLogFile();
    let p2 = initDatabaseWithAThousandTables();
    return Promise.all([p1, p2]);
});