惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
C
Cybersecurity and Infrastructure Security Agency CISA
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Know Your Adversary
Know Your Adversary
S
Securelist
I
Intezer
AWS News Blog
AWS News Blog
L
LINUX DO - 热门话题
P
Privacy International News Feed
Recent Announcements
Recent Announcements
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
The GitHub Blog
The GitHub Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Schneier on Security
Schneier on Security
N
Netflix TechBlog - Medium
爱范儿
爱范儿
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
Blog — PlanetScale
Blog — PlanetScale
WordPress大学
WordPress大学
S
Secure Thoughts
K
Kaspersky official blog
N
News | PayPal Newsroom
O
OpenAI News
Last Week in AI
Last Week in AI
C
Check Point Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cyberwarzone
Cyberwarzone
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tor Project blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
D
Docker
Hugging Face - Blog
Hugging Face - Blog
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
博客园 - 司徒正美
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
P
Palo Alto Networks Blog

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4 test: trim doctor command hotspots · openclaw/openclaw@c66f16a test: isolate agent auth and spawn hotspots · openclaw/openclaw@9285935 test: stabilize MCP startup disposal race · openclaw/openclaw@dd9d2eb test: merge browser contract server suites · openclaw/openclaw@5817a76 test: narrow ollama provider discovery setup · openclaw/openclaw@a0d9598 build: declare qa-lab aimock runtime dependency · openclaw/openclaw@24431e5 test: speed up safe-bins exec harness · openclaw/openclaw@ee856ab test: preserve tool helpers in embedded runner mocks · openclaw/openclaw@acd86a0 refactor: move memory embeddings into provider plugins · openclaw/openclaw@77e6e4c test: reuse system-run temp fixtures · openclaw/openclaw@7e9ff0f test: trim hotspot wait overhead · openclaw/openclaw@12a59b0 Check: avoid duplicate boundary prep · openclaw/openclaw@baf11b8 test: reduce hotspot fixture overhead · openclaw/openclaw@3a59edd feat(ui): overhaul settings and slash command UX (#67819) thanks @Bun… · openclaw/openclaw@2cfb660 QA Matrix: exit cleanly on failure · openclaw/openclaw@42805d2 QA Matrix: isolate scenario coverage · openclaw/openclaw@7e659e1 Matrix: refresh crypto bootstrap state · openclaw/openclaw@94081d8 QA Lab: add provider registry · openclaw/openclaw@bb7e982 Matrix: add plugin changelog · openclaw/openclaw@4acab55 test: trim more hotspot overhead · openclaw/openclaw@f485311 test: trim remaining hotspot tests · openclaw/openclaw@6ba8626 test: narrow hotspot mocks · openclaw/openclaw@dbc8179 test: isolate gemini embedding request helpers · openclaw/openclaw@cd330f5 test: trim memory and mcp hotspots · openclaw/openclaw@fd48dfa test: slim provider registry mocks · openclaw/openclaw@2e08c77 test: harden Parallels update smoke · openclaw/openclaw@1a98090 feat: default Anthropic to Opus 4.7 · openclaw/openclaw@628b454 fix: harden node-host shell payload mutability checks · openclaw/openclaw@75c551e fix: land node-host approval binding for native binaries (#66731) (th… · openclaw/openclaw@29919bb CI: add daily schedule to CodeQL workflow (#67645) · openclaw/openclaw@69d25f5 fix(gateway): capture config hash after plugin auto-enable to prevent… · openclaw/openclaw@8c11210 fix: repair sanitized replay tool results before send (#67620) (thank… · openclaw/openclaw@c3c7a99 fix: restrict HTML timeout short-circuit to transient statuses · openclaw/openclaw@de129a6 fix: keep TUI watchdog bound to active run (#67401) (thanks @xantorres) · openclaw/openclaw@3525273 Gateway/skills: dedupe skills prefix-match + drop dead fallback on log · openclaw/openclaw@d7f489f Extensions/lmstudio: back off inference preload after consecutive fai… · openclaw/openclaw@b555214 TUI/streaming: add watchdog that resets the activity indicator after … · openclaw/openclaw@f44ab20 Agents/tool-loop: enable unknown-tool stream guard by default · openclaw/openclaw@36ed367 Gateway/skills: invalidate session skills snapshot on config write · openclaw/openclaw@b23d59a fix: classify HTML provider error pages correctly (#67642) (thanks @s… · openclaw/openclaw@e588e90 fix(skills): remove unused model-usage import (#67641) · openclaw/openclaw@55f05df docs(changelog): credit codex fix superseded PRs · openclaw/openclaw@e485f24 fix(openai-codex): normalize stale transport metadata in resolution a… · openclaw/openclaw@90801ba CI: pin Docker-related GitHub Actions (#67632) · openclaw/openclaw@f697b01 Android: modernize WebView and discovery API usage (#67627) · openclaw/openclaw@44a6e50 fix(deps): bump hono to 4.12.14 and @hono/node-server to 1.19.14 (GHS… · openclaw/openclaw@fbccc18 fix(deps): bump dompurify to 3.4.0 (#67614) · openclaw/openclaw@2c2dc00 CI: add explicit permissions to all workflow jobs (fixes code-scannin… · openclaw/openclaw@01b7516 fix: register bundled TTS providers and route overrides correctly (#6… · openclaw/openclaw@6ea3cdd fix: align host tilde paths with OS home (#62804) (thanks @stainlu) · openclaw/openclaw@ecfaf64 fix: flush creds queue before reconnect socket open (#67464) (thanks … · openclaw/openclaw@405c63f fix: strip standalone <function> tool call tags from visible text (#6… · openclaw/openclaw@78df859 fix(agents): preserve cli session metadata before transcript persist … · openclaw/openclaw@898fd04 docs(changelog): move cli transcript entry · openclaw/openclaw@c1817c6 fix(agents): normalize cli transcript api field · openclaw/openclaw@3a3fae0 docs(changelog): note cli transcript persistence · openclaw/openclaw@6c343f1 fix(agents): persist cli transcript turns · openclaw/openclaw@b8ef507 fix(msteams): harden security-sensitive flows (#65841) · openclaw/openclaw@c56b56e [Dashboard] Fix exec approval modal overflow for long command content… · openclaw/openclaw@053c5b0 Docs: remove QA changelog entry · openclaw/openclaw@7fd5771 QA: fix private runtime source loading (#67428) · openclaw/openclaw@d5933af docs(gateway): correct protocol.md schema path, hello-ok example, aut… · openclaw/openclaw@489404d CI: pin Node 22 runners to 22.18.0 · openclaw/openclaw@4ffa621 models.authStatus: normalize provider ids + tighten env-backed escape… · openclaw/openclaw@f2fdb9d Update CHANGELOG.md · openclaw/openclaw@7694a92 test(parallels): clean up npm update guard jobs · openclaw/openclaw@045ea7b Plugins: prefer scanDir override paths · openclaw/openclaw@b2974da fix(dreaming): default storage.mode to "separate" so phase blocks sto… · openclaw/openclaw@8c392f0 fix(memory-core): skip dreaming transcript ingestion via session stor… · openclaw/openclaw@a1b01f0 fix: dedupe replayed exec.finished node events (#67281) · openclaw/openclaw@5dcf526
test(memory): speed up host fixture setup · openclaw/openclaw@8c93745
steipete · 2026-04-26 · via Recent Commits to openclaw:main

@@ -1,4 +1,4 @@

1-

import fs from "node:fs/promises";

1+

import fsSync from "node:fs";

22

import os from "node:os";

33

import path from "node:path";

44

import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";

@@ -19,21 +19,21 @@ import {

1919

let sharedTempRoot = "";

2020

let sharedTempId = 0;

212122-

beforeAll(async () => {

23-

sharedTempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "memory-host-sdk-tests-"));

22+

beforeAll(() => {

23+

sharedTempRoot = fsSync.mkdtempSync(path.join(os.tmpdir(), "memory-host-sdk-tests-"));

2424

});

252526-

afterAll(async () => {

26+

afterAll(() => {

2727

if (sharedTempRoot) {

28-

await fs.rm(sharedTempRoot, { recursive: true, force: true });

28+

fsSync.rmSync(sharedTempRoot, { recursive: true, force: true });

2929

}

3030

});

31313232

function setupTempDirLifecycle(prefix: string): () => string {

3333

let tmpDir = "";

34-

beforeEach(async () => {

34+

beforeEach(() => {

3535

tmpDir = path.join(sharedTempRoot, `${prefix}${sharedTempId++}`);

36-

await fs.mkdir(tmpDir, { recursive: true });

36+

fsSync.mkdirSync(tmpDir, { recursive: true });

3737

});

3838

return () => tmpDir;

3939

}

@@ -63,12 +63,12 @@ describe("listMemoryFiles", () => {

63636464

it("includes files from additional paths (directory)", async () => {

6565

const tmpDir = getTmpDir();

66-

await fs.writeFile(path.join(tmpDir, "MEMORY.md"), "# Default memory");

66+

fsSync.writeFileSync(path.join(tmpDir, "MEMORY.md"), "# Default memory");

6767

const extraDir = path.join(tmpDir, "extra-notes");

68-

await fs.mkdir(extraDir, { recursive: true });

69-

await fs.writeFile(path.join(extraDir, "note1.md"), "# Note 1");

70-

await fs.writeFile(path.join(extraDir, "note2.md"), "# Note 2");

71-

await fs.writeFile(path.join(extraDir, "ignore.txt"), "Not a markdown file");

68+

fsSync.mkdirSync(extraDir, { recursive: true });

69+

fsSync.writeFileSync(path.join(extraDir, "note1.md"), "# Note 1");

70+

fsSync.writeFileSync(path.join(extraDir, "note2.md"), "# Note 2");

71+

fsSync.writeFileSync(path.join(extraDir, "ignore.txt"), "Not a markdown file");

72727373

const files = await listMemoryFiles(tmpDir, [extraDir]);

7474

expect(files).toHaveLength(3);

@@ -80,9 +80,9 @@ describe("listMemoryFiles", () => {

80808181

it("includes files from additional paths (single file)", async () => {

8282

const tmpDir = getTmpDir();

83-

await fs.writeFile(path.join(tmpDir, "MEMORY.md"), "# Default memory");

83+

fsSync.writeFileSync(path.join(tmpDir, "MEMORY.md"), "# Default memory");

8484

const singleFile = path.join(tmpDir, "standalone.md");

85-

await fs.writeFile(singleFile, "# Standalone");

85+

fsSync.writeFileSync(singleFile, "# Standalone");

86868787

const files = await listMemoryFiles(tmpDir, [singleFile]);

8888

expect(files).toHaveLength(2);

@@ -91,7 +91,7 @@ describe("listMemoryFiles", () => {

91919292

it("ignores lowercase root memory.md when canonical MEMORY.md is absent", async () => {

9393

const tmpDir = getTmpDir();

94-

await fs.writeFile(path.join(tmpDir, "memory.md"), "# Legacy memory");

94+

fsSync.writeFileSync(path.join(tmpDir, "memory.md"), "# Legacy memory");

95959696

const files = await listMemoryFiles(tmpDir, [path.join(tmpDir, "memory.md")]);

9797

@@ -100,8 +100,8 @@ describe("listMemoryFiles", () => {

100100101101

it("prefers MEMORY.md when both root files exist", async () => {

102102

const tmpDir = getTmpDir();

103-

await fs.writeFile(path.join(tmpDir, "MEMORY.md"), "# Default memory");

104-

await fs.writeFile(path.join(tmpDir, "memory.md"), "# Legacy memory");

103+

fsSync.writeFileSync(path.join(tmpDir, "MEMORY.md"), "# Default memory");

104+

fsSync.writeFileSync(path.join(tmpDir, "memory.md"), "# Legacy memory");

105105106106

const files = await listMemoryFiles(tmpDir, [path.join(tmpDir, "memory.md"), tmpDir]);

107107

@@ -110,10 +110,10 @@ describe("listMemoryFiles", () => {

110110111111

it("skips root-memory repair backups from extra workspace paths", async () => {

112112

const tmpDir = getTmpDir();

113-

await fs.writeFile(path.join(tmpDir, "MEMORY.md"), "# Default memory");

113+

fsSync.writeFileSync(path.join(tmpDir, "MEMORY.md"), "# Default memory");

114114

const repairDir = path.join(tmpDir, ".openclaw-repair", "root-memory", "2026-04-23");

115-

await fs.mkdir(repairDir, { recursive: true });

116-

await fs.writeFile(path.join(repairDir, "memory.md"), "# Archived legacy memory");

115+

fsSync.mkdirSync(repairDir, { recursive: true });

116+

fsSync.writeFileSync(path.join(repairDir, "memory.md"), "# Archived legacy memory");

117117118118

const files = await listMemoryFiles(tmpDir, [tmpDir]);

119119

@@ -123,10 +123,10 @@ describe("listMemoryFiles", () => {

123123124124

it("handles relative paths in additional paths", async () => {

125125

const tmpDir = getTmpDir();

126-

await fs.writeFile(path.join(tmpDir, "MEMORY.md"), "# Default memory");

126+

fsSync.writeFileSync(path.join(tmpDir, "MEMORY.md"), "# Default memory");

127127

const extraDir = path.join(tmpDir, "subdir");

128-

await fs.mkdir(extraDir, { recursive: true });

129-

await fs.writeFile(path.join(extraDir, "nested.md"), "# Nested");

128+

fsSync.mkdirSync(extraDir, { recursive: true });

129+

fsSync.writeFileSync(path.join(extraDir, "nested.md"), "# Nested");

130130131131

const files = await listMemoryFiles(tmpDir, ["subdir"]);

132132

expect(files).toHaveLength(2);

@@ -135,32 +135,32 @@ describe("listMemoryFiles", () => {

135135136136

it("ignores non-existent additional paths", async () => {

137137

const tmpDir = getTmpDir();

138-

await fs.writeFile(path.join(tmpDir, "MEMORY.md"), "# Default memory");

138+

fsSync.writeFileSync(path.join(tmpDir, "MEMORY.md"), "# Default memory");

139139140140

const files = await listMemoryFiles(tmpDir, ["/does/not/exist"]);

141141

expect(files).toHaveLength(1);

142142

});

143143144144

it("ignores symlinked files and directories", async () => {

145145

const tmpDir = getTmpDir();

146-

await fs.writeFile(path.join(tmpDir, "MEMORY.md"), "# Default memory");

146+

fsSync.writeFileSync(path.join(tmpDir, "MEMORY.md"), "# Default memory");

147147

const extraDir = path.join(tmpDir, "extra");

148-

await fs.mkdir(extraDir, { recursive: true });

149-

await fs.writeFile(path.join(extraDir, "note.md"), "# Note");

148+

fsSync.mkdirSync(extraDir, { recursive: true });

149+

fsSync.writeFileSync(path.join(extraDir, "note.md"), "# Note");

150150151151

const targetFile = path.join(tmpDir, "target.md");

152-

await fs.writeFile(targetFile, "# Target");

152+

fsSync.writeFileSync(targetFile, "# Target");

153153

const linkFile = path.join(extraDir, "linked.md");

154154155155

const targetDir = path.join(tmpDir, "target-dir");

156-

await fs.mkdir(targetDir, { recursive: true });

157-

await fs.writeFile(path.join(targetDir, "nested.md"), "# Nested");

156+

fsSync.mkdirSync(targetDir, { recursive: true });

157+

fsSync.writeFileSync(path.join(targetDir, "nested.md"), "# Nested");

158158

const linkDir = path.join(tmpDir, "linked-dir");

159159160160

let symlinksOk = true;

161161

try {

162-

await fs.symlink(targetFile, linkFile, "file");

163-

await fs.symlink(targetDir, linkDir, "dir");

162+

fsSync.symlinkSync(targetFile, linkFile, "file");

163+

fsSync.symlinkSync(targetDir, linkDir, "dir");

164164

} catch (err) {

165165

const code = (err as NodeJS.ErrnoException).code;

166166

if (code === "EPERM" || code === "EACCES") {

@@ -180,7 +180,7 @@ describe("listMemoryFiles", () => {

180180181181

it("dedupes overlapping extra paths that resolve to the same file", async () => {

182182

const tmpDir = getTmpDir();

183-

await fs.writeFile(path.join(tmpDir, "MEMORY.md"), "# Default memory");

183+

fsSync.writeFileSync(path.join(tmpDir, "MEMORY.md"), "# Default memory");

184184

const files = await listMemoryFiles(tmpDir, [tmpDir, ".", path.join(tmpDir, "MEMORY.md")]);

185185

const memoryMatches = files.filter((file) => file.endsWith("MEMORY.md"));

186186

expect(memoryMatches).toHaveLength(1);

@@ -189,10 +189,10 @@ describe("listMemoryFiles", () => {

189189

it("includes image and audio files from extra paths when multimodal is enabled", async () => {

190190

const tmpDir = getTmpDir();

191191

const extraDir = path.join(tmpDir, "media");

192-

await fs.mkdir(extraDir, { recursive: true });

193-

await fs.writeFile(path.join(extraDir, "diagram.png"), Buffer.from("png"));

194-

await fs.writeFile(path.join(extraDir, "note.wav"), Buffer.from("wav"));

195-

await fs.writeFile(path.join(extraDir, "ignore.bin"), Buffer.from("bin"));

192+

fsSync.mkdirSync(extraDir, { recursive: true });

193+

fsSync.writeFileSync(path.join(extraDir, "diagram.png"), Buffer.from("png"));

194+

fsSync.writeFileSync(path.join(extraDir, "note.wav"), Buffer.from("wav"));

195+

fsSync.writeFileSync(path.join(extraDir, "ignore.bin"), Buffer.from("bin"));

196196197197

const files = await listMemoryFiles(tmpDir, [extraDir], multimodal);

198198

expect(files.some((file) => file.endsWith("diagram.png"))).toBe(true);

@@ -218,16 +218,16 @@ describe("buildFileEntry", () => {

218218

it("returns null when the file disappears before reading", async () => {

219219

const tmpDir = getTmpDir();

220220

const target = path.join(tmpDir, "ghost.md");

221-

await fs.writeFile(target, "ghost", "utf-8");

222-

await fs.rm(target);

221+

fsSync.writeFileSync(target, "ghost", "utf-8");

222+

fsSync.rmSync(target);

223223

const entry = await buildFileEntry(target, tmpDir);

224224

expect(entry).toBeNull();

225225

});

226226227227

it("returns metadata when the file exists", async () => {

228228

const tmpDir = getTmpDir();

229229

const target = path.join(tmpDir, "note.md");

230-

await fs.writeFile(target, "hello", "utf-8");

230+

fsSync.writeFileSync(target, "hello", "utf-8");

231231

const entry = await buildFileEntry(target, tmpDir);

232232

expect(entry).not.toBeNull();

233233

expect(entry?.path).toBe("note.md");

@@ -237,7 +237,7 @@ describe("buildFileEntry", () => {

237237

it("returns multimodal metadata for eligible image files", async () => {

238238

const tmpDir = getTmpDir();

239239

const target = path.join(tmpDir, "diagram.png");

240-

await fs.writeFile(target, Buffer.from("png"));

240+

fsSync.writeFileSync(target, Buffer.from("png"));

241241242242

const entry = await buildFileEntry(target, tmpDir, multimodal);

243243

@@ -253,7 +253,7 @@ describe("buildFileEntry", () => {

253253

it("builds a multimodal chunk lazily for indexing", async () => {

254254

const tmpDir = getTmpDir();

255255

const target = path.join(tmpDir, "diagram.png");

256-

await fs.writeFile(target, Buffer.from("png"));

256+

fsSync.writeFileSync(target, Buffer.from("png"));

257257258258

const entry = await buildFileEntry(target, tmpDir, multimodal);

259259

const built = await buildMultimodalChunkForIndexing(entry!);

@@ -269,24 +269,24 @@ describe("buildFileEntry", () => {

269269

for (const testCase of [

270270

{

271271

name: "grows",

272-

mutate: async (target: string, entrySize: number) => {

273-

await fs.writeFile(target, Buffer.alloc(entrySize + 32, 1));

272+

mutate: (target: string, entrySize: number) => {

273+

fsSync.writeFileSync(target, Buffer.alloc(entrySize + 32, 1));

274274

},

275275

},

276276

{

277277

name: "bytes change",

278-

mutate: async (target: string) => {

279-

await fs.writeFile(target, Buffer.from("gif"));

278+

mutate: (target: string) => {

279+

fsSync.writeFileSync(target, Buffer.from("gif"));

280280

},

281281

},

282282

] as const) {

283283

const tmpDir = getTmpDir();

284284

const target = path.join(tmpDir, `${testCase.name}.png`);

285-

await fs.writeFile(target, Buffer.from("png"));

285+

fsSync.writeFileSync(target, Buffer.from("png"));

286286287287

const entry = await buildFileEntry(target, tmpDir, multimodal);

288288

expect(entry, testCase.name).not.toBeNull();

289-

await testCase.mutate(target, entry!.size);

289+

testCase.mutate(target, entry!.size);

290290291291

await expect(buildMultimodalChunkForIndexing(entry!), testCase.name).resolves.toBeNull();

292292

}