Я использую мокко-шаги для создания тестовых последовательностей. В моем случае у меня есть, назовем их «основными», тест и несколько подтестов для каждого из них. Выглядит как:
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.
Так что я не нашел ничего другого, кроме как переопределить runner (и Suite) самостоятельно после того, как mocha требуется
Я все еще хочу найти решение, не меняя код мокко. Если кому-то интересно, я могу вставить код, например, в gist.





Вложите их и установите флаг, когда шаг 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 () { })
})
})
Подробности
«Любой сбой step немедленно прервет родитель describe», поэтому сбой в одном из step приведет к прекращению его родительского describe и не запускает связанные подтесты.
Кроме того, если 'Test 1' не завершится, флаг не будет установлен, и step 2 немедленно завершится ошибкой.
(Обычные функции, используемые начиная с «передача стрелочных функций (также известных как «лямбды») в Mocha не рекомендуется»)
Основная проблема заключается в том, что я хочу, чтобы «Тест 2» зависел от результата «Теста 1», и поэтому подтесты
это не сработает, я уже пробовал, так как
stepsнаходятся в разныхdescribesони не влияют друг на друга