Problem
Three core use case test files use shared state (let declarations + beforeEach) which violates the project convention that "each test should be completely independent":
TerminatePendingServers.test.ts
let serverManager: ReturnType<typeof mock<ServerManager>>;
let serverManagerFactory: ReturnType<typeof mock<ServerManagerFactory>>;
let serverRepository: ReturnType<typeof mock<ServerRepository>>;
let eventLogger: ReturnType<typeof mock<EventLogger>>;
let discordBot: ReturnType<typeof mock<DiscordClient>>;
let user: ReturnType<typeof mock<User>>;
let sut: TerminatePendingServers;
beforeEach(() => { ... });
Same pattern in DeleteServer.test.ts and DeleteServerForUser.test.ts.
Tests that share state via beforeEach can have hidden dependencies between test cases and are harder to reason about in isolation.
Fix
Refactor all 3 files to use the makeSut pattern:
function makeSut() {
const serverManagerFactory = mock<ServerManagerFactory>();
const serverRepository = mock<ServerRepository>();
// ... other mocks
const sut = new TerminatePendingServers({ serverManagerFactory, serverRepository, ... });
return { sut, serverManagerFactory, serverRepository, ... };
}
it('should terminate pending server after 15 minutes', async () => {
const { sut, serverRepository } = makeSut();
// Given / When / Then ...
});
Problem
Three core use case test files use shared state (
letdeclarations +beforeEach) which violates the project convention that "each test should be completely independent":TerminatePendingServers.test.tsSame pattern in
DeleteServer.test.tsandDeleteServerForUser.test.ts.Tests that share state via
beforeEachcan have hidden dependencies between test cases and are harder to reason about in isolation.Fix
Refactor all 3 files to use the
makeSutpattern: