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

时间:2015-12-16 22:44:00

标签: mocha bdd

如果您查看the official Mocha page上的示例,您会发现他们使用以下describe语法(针对其BDD模式):

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

但是,我似乎无法找到任何内容(在Mocha网站或其他地方),解释为什么第二个describe应该是#indexOf()而不是#indexOf或只是{{ 1}}。 indexOf似乎是一种非常常见的格式(我在OSS代码中已经看过它),但我以前从未见过有人添加括号。然后,摩卡人肯定比我更了解测试,所以我必须考虑他们使用这种语法是有原因的。

所以,我的问题是,任何人都可以指向我的资源:

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

如果你可以提供一个(或两者兼而有之),那就更好了。或者我也喜欢直接的答案(即不是资源的链接),如果它可以直接解释它。

基本上我只想了解这种语法的来源以及为什么我应该使用它(两者都是"因为聪明人____这么说"和"因为实际原因____"正在合法答案)。

1 个答案:

答案 0 :(得分:1)

我没有关于此的权威来源。就摩卡而言,#indexOf()并不特别。它会像处理任何其他文本一样对待它。

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

[documentation](MyConstructor #instanceMember MyConstructor.staticMember MyConstructor~internalMember)给出了一个实例,静态和内部函数的例子:

/** @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。