首页 > 解决方案 > Angular 10:Karma Jasmine 间谍方法

问题描述

有什么方法可以在像这样被监视时重置被监视的方法:

it('unit test', () => {
    document.getElementById = jasmine.createSpy().and.returnValue(document.createElement('div'));
    ....
})

标签: angularunit-testingdomjasminekarma-jasmine

解决方案


您可以在开始时存储原始方法,然后在测试用例完成后将其重置。

例如

  it('unit test', () => {
    const getElementById = document.getElementById;
    document.getElementById = jasmine
      .createSpy()
      .and.returnValue(document.createElement('div'));
    console.log(document.getElementById);
    document.getElementById = getElementById;
    console.log(document.getElementById);
  });

日志:

LOG: function wrap() { ... }
Chrome 80.0.3987.87 (Mac OS 10.13.6): Executed 2 of 14 SUCCESS (0 secs / 0.023 secs)
LOG: function getElementById() { ... }
Chrome 80.0.3987.87 (Mac OS 10.13.6): Executed 2 of 14 SUCCESS (0 secs / 0.023 secs)

第一个日志打印getElementById由间谍包装的方法。

第二个日志打印原始版本。


推荐阅读