我正在使用摩卡咖啡步骤来构建测试序列。就我而言,我们称它们为“主要”测试,每个测试和几个子测试。看起来像:
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的代码。 如果有人感兴趣,例如,我可以将代码粘贴在要点上。
答案 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"起使用的常规功能)