Angular 如何取消对使用jasmine.createSpy创建的document.getElementById的监视
我正在创建一个spy来制作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的新随机特性,它在其他测
文档。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()