摩卡 (BDD) 描述是否有标准语法,如果有,它背后的逻辑是什么?



如果您查看Mocha官方页面上的示例,您会发现它们使用以下describe语法(用于BDD模式):

describe('Array', function() {
    describe('#indexOf()', function () {

然而,我似乎找不到任何东西(在Mocha网站或其他地方)来解释为什么第二个describe应该是#indexOf()而不是#indexOf或只是indexOf#indexOf似乎是一种非常常见的格式(我在OSS代码中看到过),但我以前从未见过有人添加括号。再说一遍,Mocha人肯定比我更了解测试,所以我想他们使用这种语法是有原因的。

所以,我的问题是,有人能给我指一个资源吗:

  • 是一个"真相的来源"(例如Mocha网站上的某个地方,或某个主要测试网站上),说____是describe的默认约定(我意识到这可能根本不是JS源,因为我知道很多东西都源于RSpec)
  • 描述了采用此语法的实际好处

如果你能提供其中一种(或者同时提供两种),那就更好了。或者,如果可以直接解释的话,我也希望有一个直接的答案(即不是到资源的链接)。

基本上,我只想了解这个语法是从哪里来的,以及为什么我应该使用它("因为聪明人____这么说"one_answers"因为实际原因____"都是合法的答案)。

我没有关于这方面的权威来源。就Mocha而言,#indexOf()并不特别。它对待它就像对待任何其他文本一样。

我遇到过的唯一类似的语法是JSDoc引用类部分的语法。#name语法用于引用类实例上使用的成员。在JSDoc 3语法中,Array#indexOf是一个有意义的表达式,它引用了Array实例上使用的indexOf方法。请注意,我没有括号。我不记得在JSDoc 3中使用过括号。

[文档](MyConstructor#instanceMemberMyConstructor.staticMemberMyConstructor~innerMember)给出了实例、静态和内部函数的示例:

/** @constructor */
Person = function() {
    this.say = function() {
        return "I'm an instance.";
    }
    function say() {
        return "I'm inner.";
    }
}
Person.say = function() {
    return "I'm static.";
}
var p = new Person();
p.say();      // I'm an instance.
Person.say(); // I'm static.
// there is no way to directly access the inner function from here

并展示了如何在JSDoc 3文档中引用它们:

Person#say  // the instance method named "say."
Person.say  // the static method named "say."
Person~say  // the inner method named "say."

JSDoc 3重用了JSDoc 2中的这种语法(对内部方法进行了一次修改),据我所知,它早于Mocha。

最新更新