Jasmine:在单元测试后恢复原型方法

Pic*_*els 2 javascript mocking jasmine

为了测试我的代码的某一部分,我需要模拟一个原型方法来确保它被调用.代码看起来像这样.

SomeObject.prototype.foo = jasmine.createSpy()
var so = SomeObject()
so.bar()
expect(SomeObject.prototype.foo).toHaveBeenCalled()
Run Code Online (Sandbox Code Playgroud)

这可以工作,但它改变了我不想要的SomeObject的状态.所以我想知道有没有办法在我完成之后恢复prototype.foo的状态?我在考虑制作SomeObject的副本.我看了一下jQuery.extend,但我不确定我是否可以使用它来复制构造函数.

小智 6

两个选择.监视实例最好:

spyOn(so, 'foo');
Run Code Online (Sandbox Code Playgroud)

或者,如果您坚持要验证原型是否被调用:

spyOn(SomeObject.prototype, 'foo');
Run Code Online (Sandbox Code Playgroud)

每个规格之后,Jasmine都会撕下所有间谍.