как видно из предыдущего изображения, из описания он не называется, а все остальные есть.
Есть причина или не работает, вот и все.
Если я вставлю это в описание, оно работает.
import {
before,
beforeEach,
after,
afterEach,
describe,
it,
test,
} from "node:test";
import assert from "node:assert";
import { add, subtract } from "../index.js";
before(function () {
console.info("before");
});
beforeEach(function () {
console.info("beforeEach");
});
afterEach(function () {
console.info("afterEach");
});
after(function () {
console.info("after");
});
describe("Arithmetic Operations", () => {
it("should correctly add two numbers", () => {
const result = add(2, 3);
assert.strictEqual(result, 5);
});
it("should correctly subtract two numbers", () => {
const result = subtract(5, 3);
assert.strictEqual(result, 2);
});
});
Так в чем именно вопрос?
@TBA: узел v18.17.1
@Mureinik: Тот, который описан, почему не напечатано слово «до».



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это похоже на ошибку в средстве запуска тестов Node.js, что неудивительно, учитывая, что вы используете Node.js 18.17.1, а средство запуска тестов было объявлено стабильным только в Node.js 20.0.0.
С Node.js 18.17.1 мне удалось последовательно воспроизвести такое поведение:
➜ nvm use 18.17.1
Now using node v18.17.1 (npm v9.6.7)
➜ node node.test.js
beforeEach
afterEach
beforeEach
afterEach
▶ Arithmetic Operations
✔ should correctly add two numbers (0.834959ms)
✔ should correctly subtract two numbers (0.168333ms)
▶ Arithmetic Operations (1.795125ms)
after
ℹ tests 2
ℹ suites 1
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 0.213542
Однако, как только я перешел на последнюю версию Node.js (22.3.0 на момент написания), этот код действительно работает так, как ожидалось:
➜ nvm use 22.3.0
Now using node v22.3.0 (npm v10.8.1)
➜ node node.test.js
before
beforeEach
afterEach
beforeEach
afterEach
after
▶ Arithmetic Operations
✔ should correctly add two numbers (0.517375ms)
✔ should correctly subtract two numbers (0.674292ms)
▶ Arithmetic Operations (1.538292ms)
ℹ tests 2
ℹ suites 1
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 6.906708
Идеально отлично, спасибо. У меня возникает сомнение, а не имело ли after больше смысла печатать после всего describe, чего не происходит с версией v22.3.0. Можете ли вы мне сказать: почему duration_ms так высоко в v22.3.0 по сравнению с v18.17.1, даже если мы говорим о мс?
@Paul Я предполагаю, что старая версия не учитывает обратные вызовы before[Each]/after[Each], а более новая — учитывает. Обратите внимание, что сами тесты просто выполняют некоторые базовые математические операции, в то время как обратные вызовы выполняют ввод-вывод в стандартный вывод, что должно быть на порядок медленнее.
Но когда он говорит, что: Arithmetic Operations (1.538292ms) будет общее время, чтобы выполнить все, но почему, как вы думаете, если я это сделаю: should correctly add two numbers (0.517375ms)+should correctly subtract two numbers (0.674292ms) разве это не всегда даст мне один и тот же результат для базовых операций, которые мы не знаем?
Какую версию узла вы используете?