如何取消对使用jasmine.createSpy

时间:2019-11-12 16:38:48

标签: angular unit-testing jasmine karma-jasmine

document.getElementById = jasmine.createSpy('HTMLElement').and.returnValue(null);

我正在创建一个间谍,以使document.getElementById返回我的测试中的必需元素。由于文档是全球文档,因此该间谍遍布于规范文件中。测试执行后,是否可以删除该间谍并将getElementById还原为原始实现?

注意:我使用的是Jasmine和Karma的新版本,它会随机执行单元测试(需要执行随机测试)。我需要在多个规格文件中监视getElementById。如果我在其中一个测试中将返回值设置为null,那么即使在其他测试中将返回值重置为返回有效的dom元素后,由于Karma的新随机功能,在其他测试中它仍然也返回null。

2 个答案:

答案 0 :(得分:0)

是的,但是您将需要使用其他方法来监视document.getElementById

茉莉花会自动删除使用spyOn()source)之类的方法创建的间谍。

所以只需将代码更改为:

spyOn(document, 'getElementById').and.returnValue(null);

,一旦测试完成,它将自动删除间谍。

答案 1 :(得分:0)

重置单个间谍呼叫

spyOn(object, 'method');
expect(object.method).toHaveBeenCalled();
object.method.calls.reset();

重置所有间谍电话

如果您想重置所有间谍电话,请使用:

spy.calls.reset()

以下是其文档:https://jasmine.github.io/api/2.6/Spy_calls.html