Скопируйте метод объекта, не ссылаясь на оригинальный метод - PullRequest
0 голосов
/ 15 февраля 2012

Я провожу некоторое тестирование с помощью фреймворка Jasmine и хочу следить за методом публикации в пабе, который я использую. Однако метод публикации срабатывает дважды, и я хочу шпионить за ним только во второй раз. Я попытался просто скопировать метод publish в другой метод, а затем шпионить за оригинальным методом, например:

pubsub.publishCopy = pubsub.publish;
spyOn(pubsub, "publish");

// this call has another call to pubsub.publish. it is this
// 2nd pub sub call that I want to spy on
pubsub.publishCopy(args); 

// this shows an error because the pubsub.publishCopy is 'pointing to 
// pubsub.publish instead of being a new function with the same functionality
expect(pubsub.publish).toHaveBeenCalledWith(differentArgs); 

Однако все, что я делаю, - это просто ссылаюсь на метод pubsub.publish, когда я вызываю pubsub.publishCopy, что приводит к ошибке в моем тесте. Как правильно скопировать метод публикации в соответствии с моими потребностями?

1 Ответ

1 голос
/ 15 февраля 2012

Вы можете попробовать

pubsub.publishCopy = function() {
    var args = Array.prototype.slice.call(arguments, 0);
    this.publish.apply(this, args);
};

Это в основном обертывание оригинального метода в совершенно новый метод, вместо простого создания дополнительной ссылки на исходный объект функции.

Не знаю, еслиэто будет работать, хотя - не работал с Жасмин

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