javascript - Mocha 中 `describe` 可以包含 `describe` 和 `it` 的混合吗?

标签 javascript node.js mocha.js

我在 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()
  })
//})

实际发生的情况是,关闭所有浏览器实际上立即运行

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

或者,我错过了什么吗?

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

最佳答案

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

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

关于javascript - Mocha 中 `describe` 可以包含 `describe` 和 `it` 的混合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48267040/

相关文章:

javascript - 如何使用JS只允许文本框中的所有特殊字符出现一次?

javascript - 验证 JavaScript 对象的简单方法

javascript - 如何构造一个 jquery promises 数组?

javascript - 在同构应用程序上运行 Mocha 测试时无法导入 SCSS 文件

node.js - 在 Mocha 测试框架中是否有可能将测试报告存储在本地文件中

javascript - mocha-casperjs headless 测试 : document. 包含未定义

javascript - 打破 promise 链(具有多个快乐流和单链)

node.js - 使用 Node.js 和 Express 进行 Http Post

node.js - 在 Ubuntu 上使用 fs.writeFileSync 得到错误 : EACCES: permission denied

javascript - MongoDB,如果新值不为空,则更新集合字段