2012-02-15 28 views
0

我正在用Jasmine框架进行一些测试,我想窥探我正在使用的pub sub publish方法。然而,发布方法发射两次,我只是想第二次监视它。我想只是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方法。 – 2012-02-15 01:15:57

+0

经过进一步调查,您的方法正在工作,问题与我如何设置我的测试有关。谢谢! – 2012-02-15 01:32:26

相关问题