Как добавить функцию к объекту в JavaScript, который может получить доступ к его переменным - PullRequest
2 голосов
/ 25 сентября 2011

Я пытаюсь сделать какую-то разработку, основанную на тестировании javascript, и хотел бы заменить дао на фиктивный.

Допустим, у меня есть объект myObject, у которого есть закрытый var dao, для которого я хотел бы создать установщик:

var dao = new RealDao();

function funcUsesDao() {
    dao.doStuff();
}

Затем в другом файле у меня есть дескриптор экземпляра этого объекта, и я хочу добавить установщик, чтобы я мог сделать следующее:

var mockDao = {function doStuff() { /*mock code */}};
myObject.setDao(mockDao);
myObject.funcUsesDao(); should use mock dao

Специфика среды: это node.js и объект, к которому у меня есть дескриптор, получается с помощью var myObject = require('../myObject');

1 Ответ

1 голос
/ 25 сентября 2011

Вы бы использовали конструктор для класса, установив дао в RealDao, а затем в setDao вы установили бы этот дао в новый дао. В качестве альтернативы в конструкторе вы должны поместить ссылку на dao, а в null назначить ее новому RealDao (). (по крайней мере, я так понимаю, как люди обычно назначают новые интерфейсы для тестирования .. через конструктор)

//something like this
function Dao(interface){
  this.dao = interface || new RealDao();
}

В противном случае, то, что вы перечислили выше, является точным. вам просто нужно предоставить метод setDao, как вы указали в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...