angular - 在 Jasmine + Angular 中模拟 'window' 对象

标签 angular typescript unit-testing jasmine

我有一个函数,我想对它进行单元测试我正在比较全局对象 window & parent as const isEqual = (window == =父);

在 Angular/TypeScript 中模拟这些对象的最佳方式是什么?

另一个想法是通过函数参数获取这些对象,但无论如何它都没有解决这个问题,因为如果我使用 getSomeData(win: Window , parent: Window) {//... }

最佳答案

我采用了这个解决方案:

创建将注入(inject) window 对象的服务。

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class GlobalObjectService {
  public getWindow(): Window {
    return window;
  }
}

在测试中它看起来像:

describe('TestService', () => {
  ...
  let globalObjectService: jasmine.SpyObj<GlobalObjectService>;

  beforeEach(() => {
    globalObjectService = jasmine.createSpyObj('GlobalObjectService', ['getWindow']);
    ...
  });

  describe('#testFunc', () => {
    it('should test something', () => {
      globalObjectService.getWindow.and.returnValue({
        location: {
          href: 'window.location.href',
        },
      });
      ...
    });
  });
});

关于angular - 在 Jasmine + Angular 中模拟 'window' 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51949523/

相关文章:

Angular 2 Quickstart - 我的应用程序组件未加载

Angular 6 : Convert eager loading to lazy loading

angular - 为什么我收到商店对象而不是我自己的对象(PizzaState)?

javascript - 将 "boolean bit array"转换为 Typescript 中的数字

javascript - 在 Express.js 中从 UInt8Array 发送二进制响应

android - 机器人电动 3 : Load test specific resource

angular - 异步管道不适用于主题

javascript - Angular2 错误 - 是否包含平台模块 (BrowserModule)?

c# - 在 Akkanet 中使用依赖注入(inject)时如何传递 actor 依赖

c++ - Visual Studio 对静态库进行单元测试;防止主项目中出现额外的依赖项