feat(framework): server testing utils, transaction storage simplify, pathfinding tests (#384)

## Server Testing Utils
- Add TestServer, TestClient, MockRoom for unit testing
- Export testing utilities from @esengine/server/testing

## Transaction Storage (BREAKING)
- Simplify RedisStorage/MongoStorage to factory pattern only
- Remove DI client injection option
- Add lazy connection and Symbol.asyncDispose support
- Add 161 unit tests with full coverage

## Pathfinding Tests
- Add 150 unit tests covering all components
- BinaryHeap, Heuristics, AStarPathfinder, GridMap, NavMesh, PathSmoother

## Docs
- Update storage.md for new factory pattern API
This commit is contained in:
YHH
2025-12-29 15:02:13 +08:00
committed by GitHub
parent 10c3891abd
commit 3b978384c7
50 changed files with 7591 additions and 660 deletions

View File

@@ -7,9 +7,9 @@ import type {
ITransactionStorage,
ITransactionContext,
TransactionOptions,
TransactionResult,
} from '../core/types.js'
import { TransactionManager } from '../core/TransactionManager.js'
TransactionResult
} from '../core/types.js';
import { TransactionManager } from '../core/TransactionManager.js';
/**
* @zh 事务 Room 配置
@@ -96,32 +96,32 @@ export function withTransactions<TBase extends new (...args: any[]) => any>(
config: TransactionRoomConfig = {}
): TBase & (new (...args: any[]) => ITransactionRoom) {
return class TransactionRoom extends Base implements ITransactionRoom {
private _transactionManager: TransactionManager
private _transactionManager: TransactionManager;
constructor(...args: any[]) {
super(...args)
super(...args);
this._transactionManager = new TransactionManager({
storage: config.storage,
defaultTimeout: config.defaultTimeout,
serverId: config.serverId,
})
serverId: config.serverId
});
}
get transactions(): TransactionManager {
return this._transactionManager
return this._transactionManager;
}
beginTransaction(options?: TransactionOptions): ITransactionContext {
return this._transactionManager.begin(options)
return this._transactionManager.begin(options);
}
runTransaction<T = unknown>(
builder: (ctx: ITransactionContext) => void | Promise<void>,
options?: TransactionOptions
): Promise<TransactionResult<T>> {
return this._transactionManager.run<T>(builder, options)
return this._transactionManager.run<T>(builder, options);
}
}
};
}
/**
@@ -147,28 +147,28 @@ export function withTransactions<TBase extends new (...args: any[]) => any>(
* ```
*/
export abstract class TransactionRoom implements ITransactionRoom {
private _transactionManager: TransactionManager
private _transactionManager: TransactionManager;
constructor(config: TransactionRoomConfig = {}) {
this._transactionManager = new TransactionManager({
storage: config.storage,
defaultTimeout: config.defaultTimeout,
serverId: config.serverId,
})
serverId: config.serverId
});
}
get transactions(): TransactionManager {
return this._transactionManager
return this._transactionManager;
}
beginTransaction(options?: TransactionOptions): ITransactionContext {
return this._transactionManager.begin(options)
return this._transactionManager.begin(options);
}
runTransaction<T = unknown>(
builder: (ctx: ITransactionContext) => void | Promise<void>,
options?: TransactionOptions
): Promise<TransactionResult<T>> {
return this._transactionManager.run<T>(builder, options)
return this._transactionManager.run<T>(builder, options);
}
}