Mocha (BDD) Describe 是否有标准语法?如果有,其背后的逻辑是什么?
Is There a Standard Syntax for Mocha's (BDD) Describe, and if so What is the Logic Behind It?
如果您查看 the official Mocha page 上的示例,您会发现它们使用以下 describe
语法(针对其 BDD 模式):
describe('Array', function() {
describe('#indexOf()', function () {
但是,我似乎找不到任何东西(在 Mocha 网站或其他地方)解释为什么第二个 describe
应该是 #indexOf()
而不是 #indexOf
或者只是 indexOf
。 #indexOf
貌似是很常见的格式(我在OSS代码里看到过),但是没见过有人加括号的。话又说回来,Mocha 的人肯定比我更了解测试,所以我必须弄清楚他们使用这种语法是有原因的。
所以,我的问题是,任何人都可以指出我的资源:
- 是一个 "source of truth" (例如,在 Mocha 网站的某个地方,或在一些主要的测试站点上)说 ____ 是
describe
的默认约定(我意识到这可能甚至根本不是 JS 源代码,因为我知道很多这些东西都起源于 RSpec)
- 描述了采用这种语法的实际好处
如果您能提供其中一种(或两种都提供),那就更好了。或者我也喜欢直接回答(即不是 link 资源),如果可以直接解释的话。
基本上我只是想了解这种语法的来源以及我为什么要使用它("because smart person ____ said so" 和 "because of practical reason ____" 都是合法的答案)。
我没有这方面的权威消息来源。就摩卡而言,#indexOf()
并不特别。它像对待任何其他文本一样对待它。
我遇到过的唯一类似的语法是 JSDoc 的引用部分 class 的语法。 #name
语法用于引用在 class 的实例上使用的成员。在 JSDoc 3 语法中,Array#indexOf
是一个有意义的表达式,它指的是在 Array
实例上使用的 indexOf
方法。请注意我没有括号。我不记得曾经在 JSDoc 3 中使用过括号。
[文档](MyConstructor#instanceMember
MyConstructor.staticMember
MyConstructor~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。
如果您查看 the official Mocha page 上的示例,您会发现它们使用以下 describe
语法(针对其 BDD 模式):
describe('Array', function() {
describe('#indexOf()', function () {
但是,我似乎找不到任何东西(在 Mocha 网站或其他地方)解释为什么第二个 describe
应该是 #indexOf()
而不是 #indexOf
或者只是 indexOf
。 #indexOf
貌似是很常见的格式(我在OSS代码里看到过),但是没见过有人加括号的。话又说回来,Mocha 的人肯定比我更了解测试,所以我必须弄清楚他们使用这种语法是有原因的。
所以,我的问题是,任何人都可以指出我的资源:
- 是一个 "source of truth" (例如,在 Mocha 网站的某个地方,或在一些主要的测试站点上)说 ____ 是
describe
的默认约定(我意识到这可能甚至根本不是 JS 源代码,因为我知道很多这些东西都起源于 RSpec) - 描述了采用这种语法的实际好处
如果您能提供其中一种(或两种都提供),那就更好了。或者我也喜欢直接回答(即不是 link 资源),如果可以直接解释的话。
基本上我只是想了解这种语法的来源以及我为什么要使用它("because smart person ____ said so" 和 "because of practical reason ____" 都是合法的答案)。
我没有这方面的权威消息来源。就摩卡而言,#indexOf()
并不特别。它像对待任何其他文本一样对待它。
我遇到过的唯一类似的语法是 JSDoc 的引用部分 class 的语法。 #name
语法用于引用在 class 的实例上使用的成员。在 JSDoc 3 语法中,Array#indexOf
是一个有意义的表达式,它指的是在 Array
实例上使用的 indexOf
方法。请注意我没有括号。我不记得曾经在 JSDoc 3 中使用过括号。
[文档](MyConstructor#instanceMember MyConstructor.staticMember MyConstructor~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。