"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]);
});
这两个不一样吗?
// 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]);
});