`describe` 可以在 Mocha 中混合使用 `describe` 和 `it` 吗?

Can `describe` contain a mix of `describe` and `it` in Mocha?

我在 Mocha 中有这个简单的示例单元测试:

const {Builder, By, Key, until} = require('selenium-webdriver')
const chai = require('chai')

chai.should()

var customer
var gigger
var admin

/* eslint-disable no-unused-expressions */

/* globals describe,it */

describe('start all tests', async function () {
  describe('create customer user', async function () {
    it('creates a user browser', async function () {
      customer = await new Builder().forBrowser('chrome').build()
      customer.should.not.be.null

      this.timeout(5000)

      await customer.get('http://www.google.com/ncr')
      await customer.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN)
      await customer.wait(until.titleIs('webdriver - Google Search'), 1000)
    })
    it('creates a gigger browser', async function () {
      gigger = await new Builder().forBrowser('chrome').build()
      gigger.should.not.be.null
    })

    it('creates an admin browser', async function () {
      admin = await new Builder().forBrowser('chrome').build()
      admin.should.not.be.null
    })
  })

  describe('close it all down', async function () {
    it('close all browsers down', async function () {
      await customer.quit()
      await gigger.quit()
      await admin.quit()
    })
  })
})

一切正常。但!如果我取消评论最后一个 describe:

//describe('close it all down', async function () {
  it('close all browsers down', async function () {
    await customer.quit()
    await gigger.quit()
    await admin.quit()
  })
//})

实际发生的是 close all browsers down 实际上 运行 立即

这是因为 describe 函数 必须 包含所有 describe 函数,而不是 it 吗?如果是这样,则没有记录。

或者,我是不是漏掉了什么?

附录:事实上,Mocha 实际上 是如何工作的?我已经习惯了只是打字,以至于我从来没有完全了解它的实际工作原理。 Mocha 的 describe() 实际上是做什么的?它只是 运行 回调吗?当另一个嵌套的 describe() 被调用时,它如何判断它是嵌套的,以及父级是哪一个?这一切是如何运作的,"in general"?

您所有的测试都是 运行 异步的,因此您无法控制它们的执行流程,对于您想做的事情,您应该使用 after() 参见 mocha hooks

对于您的其他问题,您应该看到这个 thread 那里有很好的解释。测试愉快!