代码之家  ›  专栏  ›  技术社区  ›  bobbyrne01

在窗口中测试代码。addEventListener函数

  •  0
  • bobbyrne01  · 技术社区  · 7 年前

    angularjs 基于组件,运行良好,但在任何情况下都要考虑测试覆盖率 window.addEventListener('message', 未涵盖。

    我应该嘲笑 window addEventListener ? 或者监视它并检查它是否被调用?

    export class MyComponentController {
      constructor() {}
    
      public theEventOccurred(e: any) {
        let json = JSON.parse(e.data);
        console.log(json.document);
      }
    
      public $onInit() {
        window.addEventListener('message', (event) => {
          this.theEventOccurred(event);
        }, false);
      }
    }
    

    describe('Component: my', () => {
    
      let $componentController: angular.IComponentControllerService;
      let scope: angular.IScope;
    
      beforeEach(inject(
        ($rootScope: angular.IScope,
          _$componentController_: angular.IComponentControllerService) => {
          scope = $rootScope.$new();
          $componentController = _$componentController_;
        }));
    
      describe('Controller: MyComponentController', () => {
        it('should log json.document', () => {
          let ctrl: any = $componentController('my', { $scope: scope });
          ctrl.$onInit();
        });
      });
    });
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Telman    7 年前

    我认为直接访问不是一个好模式 window document

    如我所见,更好的方法是 在一个单独的服务中,然后只使用依赖注入将服务放入组件中。

    检查 this

    然后,您可以监视服务的方法,或者只在测试中注入一个模拟服务。