当前位置: 首页 > 面试题库 >

在Mocha中describe()的作用是什么?

谭正谊
2023-03-14
问题内容

Mocha官方站点上的文档包含以下示例:

describe('User', function(){
  describe('#save()', function(){
    it('should save without error', function(done){
      var user = new User('Luna');
      user.save(function(err){
        if (err) throw err;
        done();
      });
    })
  })
})

我想知道什么时候应该将测试嵌套在describe函数中以及其基本目的describe是什么。我可以比较传递给describe编程语言的注释的第一个参数吗?describe控制台的输出中未显示任何内容。是仅出于可读性目的,还是该功能还有其他用途?

如果我这样使用,有什么问题吗?

describe('User', function(){
    describe('#save()', function(){
        var user = new User('Luna');
        user.save(function(err){
            if (err) throw err;
            done();
        })
    })
})

如果我这样做,则测试仍会通过。


问题答案:

it调用会标识每个测试,但其本身it不会告诉Mocha任何有关测试套件 结构的信息
describe调用的使用方式为测试套件提供了结构。以下是一些describe用于构建测试套件的内容。这是一个测试套件的示例,出于讨论目的对其进行了简化:

function Foo() {
}

describe("Foo", function () {
    var foo;
    beforeEach(function () {
        foo = new Foo();
    });
    describe("#clone", function () {
        beforeEach(function () {
            // Some other hook
        });
        it("clones the object", function () {
        });
    });
    describe("#equals", function () {
        it("returns true when the object passed is the same", function () {
        });
        it("returns false, when...", function () {
        });
    });
    afterEach(function () {
        // Destroy the foo that was created.
        // foo.destroy();
    });
});

function Bar() {
}

describe("Bar", function () {
    describe("#clone", function () {
        it("clones the object", function () {
        });
    });
});

试想一下,FooBar有全面的课程。Foo具有cloneequals方法。Barclone。我上面的结构是为这些类构造测试的一种可能方法。

(该#符号在某些系统(例如jsdoc)中用于表示实例字段。因此,当与方法名称一起使用时,它表示在类的实例上调用的方法(而不是类方法,该方法称为在类本身上)。测试套件在没有#。)的情况下也可以正常运行。

提供横幅

摩卡(Mocha)的一些记者会在您describe制作的报告中显示您的名字。例如,spec报告者(可以通过运行来使用$ mocha -R spec)将报告:

  Foo
    #clone
      ✓ clones the object 
    #equals
      ✓ returns true when the object passed is the same 
      ✓ returns false, when...

  Bar
    #clone
      ✓ clones the object


  4 passing (4ms)

帮助选择要运行的零件

如果只想运行某些测试,则可以使用该--grep选项。因此,如果您只关心Bar类,则可以这样做$ mocha -R spec --grep Bar,并获得输出:

  Bar
    #clone
      ✓ clones the object


  1 passing (4ms)

或者,如果您只关心clone所有类的方法,则$ mocha -R spec --grep '\bclone\b'获取输出:

  Foo
    #clone
      ✓ clones the object

  Bar
    #clone
      ✓ clones the object


  2 passing (5ms)

给出的值--grep被解释为正则表达式,因此当我通过时,我\bclone\b只要求输入单词clone,而不要求诸如clones或之类的东西cloned

提供挂钩

在上面的示例中,beforeEachand
afterEach调用是挂钩。每个挂钩都会影响作为挂钩父项的呼叫it内部的describe呼叫。各种钩子是:

  • beforeEach``itdescribe通话中每个人之前运行。

  • afterEach``itdescribe通话中每个人之后运行。

  • before它会itdescribe调用中的任何个人运行之前运行一次。

  • after``itdescribe调用中的所有个人都运行之后,该命令将运行一次。

这些挂钩可用于获取测试所需的资源或创建测试所需的数据结构,然后在测试完成后释放资源或销毁这些结构(如果需要)。

您在问题末尾显示的摘录不会产生错误,但实际上不包含任何测试,因为测试由定义it



 类似资料:
  • 本文向大家介绍ZooKeeper在Kafka中的作用是什么?相关面试题,主要包含被问及ZooKeeper在Kafka中的作用是什么?时的应答技巧和注意事项,需要的朋友参考一下 答:Apache Kafka是一个使用Zookeeper构建的分布式系统。虽然,Zookeeper的主要作用是在集群中的不同节点之间建立协调。但是,如果任何节点失败,我们还使用Zookeeper从先前提交的偏移量中恢复,因为

  • 此类:HtmlString 使用: 它只是“构造”一个字符串并返回字符串本身! 有人能解释一下吗?非常感谢:)

  • 我开始学习现代OpenGL,正如标题所说,我只是想确定VAO在渲染管道中的用途。 在渲染时,我们使用VBO存储数据,然后我们使用OpenGL函数,比如:glAttribe告诉GPU我们将“以那种方式”使用这些数据,比如:我们通过VBO的顶点中的前3个浮动实际上是位置,接下来的3个浮动是颜色等等...然后我读到,我们需要一些VAO来存储顶点的描述,但这里的目标是什么? 提前谢了。

  • 问题内容: 我试图了解TimeDistributed包装器在Keras中的作用。 我得到了TimeDistributed“将层应用于输入的每个时间片”。 但是我做了一些实验,却得到了我无法理解的结果。 简而言之,对于LSTM层,TimeDistributed和Just Dense层的结果相同。 对于这两个模型,我得到的输出形状为 (None,10,1) 。 在RNN层之后,谁能解释TimeDist

  • 名称 git-describe - 描述一个使用它可以访问的最近标签的提交 概要 git describe [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>…]git describe [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>] 描述 该命令查找可从提

  • 我正在试图理解Keras中扁平化功能的作用。下面是我的代码,这是一个简单的两层网络。它接收形状(3,2)的二维数据,输出形状(1,4)的一维数据: 这将打印出y具有形状(1,4)。但是,如果我删除展平线,则它会打印出y具有形状(1、3、4)。 我不明白这一点。根据我对神经网络的理解,这个模型。add(Dense(16,input\u shape=(3,2)))函数正在创建一个具有16个节点的隐藏完