From 97987fe35b4b72d7ccea28053fffc9df78b57b7b Mon Sep 17 00:00:00 2001 From: catloversg <152669316+catloversg@users.noreply.github.com> Date: Wed, 11 Feb 2026 01:13:00 +0700 Subject: [PATCH] BUGFIX: Global states are not reset properly between each Jest test (#2487) --- test/jest/Utilities.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/test/jest/Utilities.ts b/test/jest/Utilities.ts index 4763675a9..ccdda6950 100644 --- a/test/jest/Utilities.ts +++ b/test/jest/Utilities.ts @@ -15,6 +15,10 @@ import { purchaseServer } from "../../src/Server/ServerPurchases"; import { purchaseHacknet } from "../../src/Hacknet/HacknetHelpers"; import { initForeignServers } from "../../src/Server/ServerHelpers"; import { generateNextPid } from "../../src/Netscript/Pid"; +import { initBitNodeMultipliers } from "../../src/BitNode/BitNode"; +import { resetGoPromises } from "../../src/Go/boardAnalysis/goAI"; +import { enterBitNode } from "../../src/RedPill"; +import { getDefaultBitNodeOptions } from "../../src/BitNode/BitNodeUtils"; declare const importActual: (typeof config)["doImport"]; @@ -54,12 +58,26 @@ export function initGameEnvironment() { export function setupBasicTestingEnvironment( { purchaseHacknetServer, purchasePServer } = { purchasePServer: false, purchaseHacknetServer: false }, ): void { + // We need to delete all servers before calling initForeignServers. prestigeAllServers(); setPlayer(new PlayerObject()); + + // Basic steps of initializing a new save file. These are the steps that we do in Engine.load() when there is no save + // data. + initBitNodeMultipliers(); Player.init(); - Player.sourceFiles.set(4, 3); - Player.money = 1e15; initForeignServers(Player.getHomeComputer()); + Player.reapplyAllAugmentations(); + resetGoPromises(); + + // Grant SF4 for conveniently using Singularity APIs in tests. + Player.sourceFiles.set(4, 3); + // Simulate bitflume. This step is very important. It ensures all global states (e.g., Factions, Companies, BN mults) + // are reset. + enterBitNode(true, Player.bitNodeN, 1, getDefaultBitNodeOptions()); + // Get some money. + Player.money = 1e15; + if (purchasePServer) { purchaseServer("test-server-1", 2); }