Так как переменная gateway
на самом деле не global
(она только «глобальная» в модуле file.ts
), вы не можете напрямую имитировать ее извне (я не работал с rewire, возможно, это разрешить это). Но есть более простой способ сделать это, не полагаясь на дополнительную библиотеку:
Как насчет того, чтобы обернуть вашу handler
функцию в класс и определить метод для инкапсуляции доступа к Map
? В своем модульном тесте вы можете просто перезаписать / имитировать поведение этого метода. Что-то вроде:
export class EventHandler {
private gateways = new Map<string, Set<number>>();
async handler (event: any = {}): Promise<any> {
// obtain action
const action = await ...;
const gws: Set<number> | undefined = this.getAction(action);
console.log(gws)
return gws;
}
getAction(action) {
return this.gateways.get(action);
}
}
Затем в своем модульном тесте вы можете просто переопределить getAction
вручную или использовать Sinon для создания заглушки. Вот как это сделать вручную:
describe('EventHandler', () => {
it('handler should correctly return values', async () => {
const eventHandler = new EventHandler();
// mock behaviour of `getAction`
eventHandler.getAction = () => [1, 2, 3, 4, 5, 6, 7, 8];
const result = await eventHandler.handler('');
expect(result).to.eql([1, 2, 3, 4, 5, 6, 7, 8]);
});
});