为了测试我的代码的某一部分,我需要模拟一个原型方法来确保它被调用。代码看起来像这样。
SomeObject.prototype.foo = jasmine.createSpy()
var so = SomeObject()
so.bar()
expect(SomeObject.prototype.foo).toHaveBeenCalled()
这有效,但它改变了我不想要的SomeObject的状态。所以我想知道有没有办法在我完成之后恢复prototype.foo的状态?我在考虑制作SomeObject的副本。我看了一下jQuery.extend,但我不确定是否可以使用它来复制构造函数。
答案 0 :(得分:5)
两种选择。监视实例最好:
spyOn(so, 'foo');
或者,如果您坚持要验证是否要调用原型:
spyOn(SomeObject.prototype, 'foo');
每个规格之后,茉莉花都会撕下所有间谍。
答案 1 :(得分:0)
delete SomeObject.prototype.foo;
在tearDown或刚结束的具体测试中。