可以`描述'在摩卡中包含`describe`和`it`的混合物吗?

时间:2018-01-15 16:29:33

标签: javascript node.js 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吗?如果是这样,则没有记录。

或者,我错过了什么?

ADDENDUM :事实上,Mocha 实际上是如何工作的?我已经习惯了打字,我从来没有深入到它的实际运作中。摩卡的describe()实际上做了什么?它只是运行回调吗?当调用另一个嵌套的describe()时,它如何判断它是嵌套的,父类是哪一个?一般来说,这一切是如何运作的?

1 个答案:

答案 0 :(得分:1)

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

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