什么是Mocha中的describe()

时间:2014-01-25 17:15:00

标签: javascript node.js express mocha

我试图弄脏Mocha,这是我从文档中看到的例子:

var assert = require("assert")
describe('Array', function(){
  describe('#indexOf()', function(){
    it('should return -1 when the value is not present', function(){
      assert.equal(-1, [1,2,3].indexOf(5));
      assert.equal(-1, [1,2,3].indexOf(0));
    })
  })
})

大多数示例都显示了第二个描述语句

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

#中的#indexOf()开始。这#有什么意义?为什么这不能简单地写成indexOf?我在哪里可以基本了解描述的工作原理?

PS:我查看了http://visionmedia.github.io/mocha/#interfaces处的文档,但无法弄清楚这些文档是如何产生的,以及这些界面是如何处理的。

THX

3 个答案:

答案 0 :(得分:8)

mocha的bdd语法受到红宝石RSpec的启发,因此您可以找到搜索RSpec的摩卡常规的最佳提示,这里很好开始的地方:

http://betterspecs.org/

特别提到#

  

例如,使用Ruby的文档约定。 (或::)在引用实例方法的名称时引用类方法的名称和#。

答案 1 :(得分:0)

查看Mocha的源代码,我发现在#的第一个参数中出现describe时,我没有看到任何重要内容。

这就是说,在JavaScript的一些文档系统中(例如,jsdoc),使用#表示后面的内容属于对象实例,而不是对象的类。因此,Foo#bar可以像这样称呼:

var foo = new Foo();
foo.bar(...);

不喜欢这样:

Foo.bar(...)

后者将表示为Foo.bar。因此,在测试套件中使用相同的符号来区分被测试的方法是属于实例还是类是有意义的。

答案 2 :(得分:-1)

  

以#indexOf()中的#开头。这有什么意义#?

无。有些人认为它看起来更好。

  

我在哪里可以基本了解描述的工作原理?

这基本上是一种将测试组合在一起并运行before / after进行一组测试的方法。

你知道什么时候需要它,如果你问这个问题,你可以安全地忽略所有describe并在没有它们的情况下编写测试。