带有嵌套描述的订单

时间:2019-03-25 10:58:35

标签: node.js mocha

我正在使用摩卡咖啡步骤来构建测试序列。就我而言,我们称它们为“主要”测试,每个测试和几个子测试。看起来像:

  1. 测试1
    • 子测试
    • 子测试
  2. 测试2
    • 子测试
    • 子测试

step("Test 1", () => {})
describe("Sub-test 1", () => {
  it("Sub-Test 1", () => {})
  it("Sub-Test 1", () => {})
})
step("Test 2", () => {})
describe("Sub-test 2", () => {
  it("Sub-Test 2", () => {})
  it("Sub-Test 2", () => {})
})

所以我希望它们按照书面形式运行,但实际上是这样:

✓ Test 1
✓ Test 2
  Sub-test 1
    ✓ Sub-Test 1
    ✓ Sub-Test 1
  Sub-test 2
     ✓ Sub-Test 2
     ✓ Sub-Test 2

在这种情况下,如果“测试2”失败,则完全不会运行子测试,但是我需要完成“子测试1”,因为它们仅取决于“测试1”而不是“测试2”

我尝试将所有测试分开放在不同的“描述”中,但随后“步骤”根本不起作用

我的解决方案:

我发现摩卡执行的默认描述方式是:

  • 其他代码
  • 描述

此行为在mocha / lib / runner.js中定义 因此,我什么都没发现,然后在需要mocha之后重新定义了跑步者(和套件)

我仍然想找到解决方案而不更改mocha的代码。 如果有人感兴趣,例如,我可以将代码粘贴在要点上。

1 个答案:

答案 0 :(得分:0)

嵌套它们并在步骤1成功时设置一个标志,然后在步骤2中对该标志进行断言。

const assert = require('assert');

let step1Success = false;
describe('Test 1', function () {
  step('Test 1', function () { 
    // ... Test 1 code
    step1Success = true;
  })
  describe('Sub-test 1', function () {
    it('Sub-Test 1', function () { })
    it('Sub-Test 1', function () { })
  })
})
describe('Test 2', function () {
  step('Test 2', function () {
    assert.ok(step1Success);
    // ... Test 2 code
  })
  describe('Sub-test 2', function () {
    it('Sub-Test 2', function () { })
    it('Sub-Test 2', function () { })
  })
})

详细信息

"Any failing step will abort the parent describe immediately",因此step中的任何一个失败都会中止其父项describe,并且不会运行相关的子测试。

此外,如果'Test 1'未完成,则不会设置该标志,并且step 2将立即失败。

(自"passing arrow functions (aka "lambdas") to Mocha is discouraged"起使用的常规功能)