使用Mocha进行单元测试的“之前”钩子有什么意义?

时间:2018-05-02 14:09:58

标签: unit-testing 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
    })
})

这是一个人为的例子来证明我的意思。

1 个答案:

答案 0 :(得分:2)

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

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

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

你能否详细说明你的意思"阻止线程"?

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

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

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