Angular 如何取消对使用jasmine.createSpy创建的document.getElementById的监视

Angular 如何取消对使用jasmine.createSpy创建的document.getElementById的监视,angular,unit-testing,jasmine,karma-jasmine,Angular,Unit Testing,Jasmine,Karma Jasmine,我正在创建一个spy来制作文档。getElementById在我的一个测试中返回所需的元素。由于文档是全局的,所以这个间谍存在于规范文件中。有没有办法在测试执行后删除此间谍并将getElementById还原为其原始实现 注意:我使用的是Jasmine和Karma的新版本,它随机执行单元测试(需要执行随机测试)。我需要在多个规范文件中监视getElementById。如果我在一个测试中将返回值设置为null,那么即使在其他测试中重置它以返回有效的dom元素,由于Karma的新随机特性,它在其他测

我正在创建一个spy来制作
文档。getElementById
在我的一个测试中返回所需的元素。由于文档是全局的,所以这个间谍存在于规范文件中。有没有办法在测试执行后删除此间谍并将
getElementById
还原为其原始实现


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

是的,但是您需要使用不同的方法来监视
document.getElementById

Jasmine会自动删除使用
spyOn()等方法创建的间谍

因此,只需将代码更改为:

spyOn(文档'getElementById')。和.returnValue(null);

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

重置单个间谍呼叫

document.getElementById = jasmine.createSpy('HTMLElement').and.returnValue(null);
重置所有间谍呼叫

如果要重置所有间谍呼叫,请使用:

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

下面是它的文档:

spy.calls.reset()只会重置spy,但spy仍然存在。我想在它被使用后立即删除它。spyOn文档不起作用。检查此链接以获取可能的解决方案:
spy.calls.reset()