在Mocha.js文档中,有3种beforeEach
用法示例。
beforeEach(function (done) {...
必须运行完成回调,以便Mocha知道挂钩已完成beforeEach(function () { return promise...
返回一个promise,因此不需要回调。beforeEach(function () {...
其中未引用回调和未返回承诺。其中任何一个本身看起来都不错,但是mocha如何区分case(1)和case(2)和(3)? Mocha如何检测回调是否被定义为传递给beforeEach
的参数(案例1),因此需要在继续测试之前调用,而不是传递回调的情况2和3,因此测试可以在beforeEach
函数完成后立即开始吗?
答案 0 :(得分:1)
这很简单,可以通过阅读Mocha的源代码来发现,这就是我刚才所做的。 Mocha所做的是检查传递给beforeEach
或任何其他钩子或it
的函数是否通过检查函数的length
字段来获取参数。以下与Node.js的交互式会话说明了这一点:
> function foo() {}
undefined
> foo.length
0
foo.length
为0,因为foo
不接受任何参数。
> function bar(done) {}
undefined
> bar.length
1
bar.length
为1,因为bar
只接受一个参数。
在Mocha中,此测试在Runnable
个对象的构造函数中完成:
this.async = fn && fn.length;
每个钩子都被建模为Hook
对象,它是Runnable
的派生类。每个测试都建模为Test
对象,它也是Runnable
的派生类。