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

时间:2011-05-09 13:56:21

标签: javascript mocking jasmine

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

SomeObject.prototype.foo = jasmine.createSpy()
var so = SomeObject()
so.bar()
expect(SomeObject.prototype.foo).toHaveBeenCalled()

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

2 个答案:

答案 0 :(得分:5)

两种选择。监视实例最好:

spyOn(so, 'foo');

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

spyOn(SomeObject.prototype, 'foo');

每个规格之后,茉莉花都会撕下所有间谍。

答案 1 :(得分:0)

delete SomeObject.prototype.foo;

在tearDown或刚结束的具体测试中。