






















@@ -1,4 +1,4 @@
1-import { afterEach, beforeEach, describe, expect, it } from "vitest";
1+import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
22import {
33onDiagnosticEvent,
44resetDiagnosticEventsForTest,
@@ -19,11 +19,14 @@ function memoryUsage(overrides: Partial<NodeJS.MemoryUsage>): NodeJS.MemoryUsage
19192020describe("diagnostic memory", () => {
2121beforeEach(() => {
22+vi.useFakeTimers();
23+vi.setSystemTime(new Date("2026-04-22T12:00:00.000Z"));
2224resetDiagnosticEventsForTest();
2325resetDiagnosticMemoryForTest();
2426});
25272628afterEach(() => {
29+vi.useRealTimers();
2730resetDiagnosticEventsForTest();
2831resetDiagnosticMemoryForTest();
2932});
@@ -39,11 +42,17 @@ describe("diagnostic memory", () => {
3942});
4043stop();
414442-expect(events).toMatchObject([
45+expect(events).toEqual([
4346{
47+seq: 1,
48+ts: 1_776_859_200_000,
49+trace: undefined,
4450type: "diagnostic.memory.sample",
4551uptimeMs: 123,
4652memory: {
53+arrayBuffersBytes: 5,
54+externalBytes: 10,
55+heapTotalBytes: 80,
4756rssBytes: 4096,
4857heapUsedBytes: 1024,
4958},
@@ -57,6 +66,7 @@ describe("diagnostic memory", () => {
57665867emitDiagnosticMemorySample({
5968now: 1000,
69+uptimeMs: 0,
6070memoryUsage: memoryUsage({ rss: 2000 }),
6171thresholds: {
6272rssWarningBytes: 1000,
@@ -66,14 +76,38 @@ describe("diagnostic memory", () => {
6676});
6777stop();
687869-expect(events).toContainEqual(
70-expect.objectContaining({
79+expect(events).toEqual([
80+{
81+seq: 1,
82+ts: 1_776_859_200_000,
83+trace: undefined,
84+type: "diagnostic.memory.sample",
85+uptimeMs: 0,
86+memory: {
87+arrayBuffersBytes: 5,
88+externalBytes: 10,
89+heapTotalBytes: 80,
90+heapUsedBytes: 40,
91+rssBytes: 2000,
92+},
93+},
94+{
95+seq: 2,
96+ts: 1_776_859_200_000,
97+trace: undefined,
7198type: "diagnostic.memory.pressure",
7299level: "warning",
73100reason: "rss_threshold",
74101thresholdBytes: 1000,
75-}),
76-);
102+memory: {
103+arrayBuffersBytes: 5,
104+externalBytes: 10,
105+heapTotalBytes: 80,
106+heapUsedBytes: 40,
107+rssBytes: 2000,
108+},
109+},
110+]);
77111});
7811279113it("can check pressure without recording an idle memory sample", () => {
@@ -121,15 +155,24 @@ describe("diagnostic memory", () => {
121155});
122156stop();
123157124-expect(events).toContainEqual(
125-expect.objectContaining({
126-type: "diagnostic.memory.pressure",
127-level: "warning",
128-reason: "rss_growth",
129-rssGrowthBytes: 700,
130-windowMs: 1000,
131-}),
132-);
158+expect(events.at(-1)).toEqual({
159+seq: 3,
160+ts: 1_776_859_200_000,
161+trace: undefined,
162+type: "diagnostic.memory.pressure",
163+level: "warning",
164+reason: "rss_growth",
165+thresholdBytes: 500,
166+rssGrowthBytes: 700,
167+windowMs: 1000,
168+memory: {
169+arrayBuffersBytes: 5,
170+externalBytes: 10,
171+heapTotalBytes: 80,
172+heapUsedBytes: 40,
173+rssBytes: 1700,
174+},
175+});
133176});
134177135178it("throttles repeated pressure events by reason and level", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。