【问题标题】:What is describe() in Mocha摩卡中的 describe() 是什么
【发布时间】:2014-02-16 16:19:34
【问题描述】:

我正在尝试使用 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 的文档,但无法弄清楚这些是如何形成的以及这些接口是如何处理的。

谢谢

【问题讨论】:

  • 那只是一个字符串,绝对没有任何意义。就像Array#indexOf(),基本上indexOf是Array Class/Object的函数
  • 为什么所有的人都在没有最少研究的情况下给出答案?# 确实意味着某些东西(实例方法),而且它是公认的惯例,我在下面添加了我的答案。
  • 这本质上是 stackoverflow.com/questions/19298118/… 的副本,那里的答案也回答了这个问题。

标签: javascript node.js express mocha.js


【解决方案1】:

mocha 的 bdd 语法受 ruby​​ 的 RSpec 启发,因此您会发现搜索 RSpec 的 mocha 约定的最佳提示,这是一个很好的起点:

http://betterspecs.org/

这里特别提到了#

例如,使用 . (或 ::) 引用类方法的名称,# 引用实例方法的名称。

【讨论】:

    【解决方案2】:

    查看 Mocha 的源代码,我看不出它在describe 的第一个参数中出现# 有什么意义。

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

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

    不是这样的:

    Foo.bar(...)
    

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-01-12
        • 2022-01-20
        • 2013-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-28
        相关资源
        最近更新 更多