2012-02-15 5 views
0

Я занимаюсь тестированием с помощью структуры Jasmine, и я хочу следить за используемым мной методом публикации публикации pub. Тем не менее, метод публикации стреляет дважды, и я только хочу, чтобы шпионить за ним второй раз. Я попытался просто скопировать метод 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

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

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

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

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

+0

Его до сих пор дает мне ту же ошибку из-за this.publish до сих пор относится к оригинальному методу pubsub.publish. –

+0

После дальнейшего исследования ваш метод работает, и проблема связана с тем, как я настроил свой тест. Благодаря! –