Вместо того, чтобы позволить вашему классу инициализировать желаемую структуру, вы должны предоставить (внедрить) его структуру при инициализации.Это принцип Dependency Injection (Constructor инъекция).
var genericClass = class {
constructor(initialStructure) {
this.genericStructure = initialStructure;
}
async getState(key) {
//some more core logic
return this.genericStructure[key];
}
async putState(key, genericJson) {
this.genericStructure[key] = genericJson;
return true;
}
}
И теперь в ваших тестах вы можете сдать все, что захотите, за initialStructure
.
Обновленный ответ
Из вашего комментария кажется, что вопрос был немного запутанным.Я думаю, что вам нужно также посмеяться над методами классов, чтобы изменить их функциональность и в то же время поддерживать внедрение зависимостей.Вы можете использовать что-то вроде ниже -
function testClassProxy(map) {
let handleSetProps = function(args){
map.set(args[0], args[1]);
return true;
}
let handleGetProps = function(args){
return map.get(args[0]);
}
let handler = {
get(target, propKey) {
return function (...args) {
switch(propKey){
case 'setProps':{
return handleSetProps(args)
}
case 'getProps': {
return handleGetProps(args)
}
}
};
}
};
return new Proxy(map, handler);
}
let proxy = testClassProxy(new Map());
console.log(
proxy.setProps('a', '1'),
proxy.getProps('a')
);