该it
调用会标识每个测试,但其本身it
不会告诉Mocha任何有关测试套件结构的信息。describe
调用的使用方式为测试套件提供了结构。以下是一些describe
用于构建测试套件的内容。这是一个测试套件的示例,出于讨论目的对其进行了简化:
function Foo() {
}
describe("Foo", function () {
var foo;
beforeEach(function () {
foo = new Foo();
});
describe("#clone", function () {
beforeEach(function () {
});
it("clones the object", function () {
});
});
describe("#equals", function () {
it("returns true when the object passed is the same", function () {
});
it("returns false, when...", function () {
});
});
afterEach(function () {
});
});
function Bar() {
}
describe("Bar", function () {
describe("#clone", function () {
it("clones the object", function () {
});
});
});
想象一下,Foo
并且Bar
是成熟的类。Foo
具有clone
和equals
方法。Bar
有clone
。我上面的结构是为这些类构造测试的一种可能方法。
(#
某些系统(例如jsdoc)使用该符号表示实例字段。因此,当与方法名称一起使用时,它表示在类的实例上调用的方法(而不是称为类的方法)。在类本身上)。测试套件在没有#
。)。
提供横幅
摩卡咖啡的一些记者会在您describe
制作的报告中显示您的名字。例如,spec
报告程序(您可以通过运行来使用$ mocha -R spec
)将报告:
Foo
#clone
✓ clones the object
#equals
✓ returns true when the object passed is the same
✓ returns false, when...
Bar
#clone
✓ clones the object
4 passing (4ms)
帮助选择要运行的零件
如果只想运行某些测试,则可以使用该--grep
选项。因此,如果您只关心Bar
类,则可以这样做$ mocha -R spec --grep Bar
,并获得输出:
Bar
#clone
✓ clones the object
1 passing (4ms)
或者,如果您只关心clone
所有类的方法,则$ mocha -R spec --grep '\bclone\b'
获取输出:
Foo
#clone
✓ clones the object
Bar
#clone
✓ clones the object
2 passing (5ms)
给定的值--grep
被解释为正则表达式,因此当我通过时,我\bclone\b
只要求输入单词clone
,而不要求诸如clones
或之类的东西cloned
。
提供挂钩
在上面的示例中,beforeEach
andafterEach
调用是挂钩。每个挂钩都会影响作为挂钩父项的呼叫it
内部的describe
呼叫。各种挂钩是:
beforeEach
it
在describe
通话中每个人之前运行。
afterEach
it
在describe
通话中每个人之后运行。
before
它会it
在describe
调用中的任何个人运行之前运行一次。
after
it
在describe
调用中的所有个人都运行之后运行一次。
这些挂钩可用于获取资源或创建测试所需的数据结构,然后在测试完成后释放资源或销毁这些结构(如果需要)。
问题末尾显示的代码片段不会产生错误,但实际上不包含任何测试,因为测试由定义it
。