【问题标题】:Testing angular app with large amount of injected services使用大量注入服务测试 Angular 应用程序
【发布时间】:2019-11-11 19:13:11
【问题描述】:

我最近有一个要为其编写单元测试的企业项目。该应用程序真的很大。它有一个大的注射三。当我设置测试时,我花了半天时间只模拟注入的服务。问题是,我正在测试的服务具有n 注入服务的数量,其中每个注入服务再次具有n 注入服务的数量,并且列表继续到无限数量。目前我只是通过创建假类来模拟它们,但话又说回来,为每个假类编写假方法在这个项目中是一项非常耗时的任务。 (主要是因为每个注入的服务在构造函数中都有大量的订阅)。

我目前的测试设置:

class FrameStateServiceStub {
    public changedCurrentFrame: Observable<LayerId> = EMPTY;
    public changedAvailableFrames: Observable<LayerId> = of("");

    public getCurrentFrame(layerId: LayerId): Frame {
        return frame;
    }

    public getAvailableFrames(layerId: LayerId): Frame[] {
        return [frame];
    }
}

class LoadingIndicatorServiceStub {
}

describe("DisplayService", () => {

  const frameStateServiceStub = new FrameStateServiceStub();
  const loadingIndicatorServiceStub = new LoadingIndicatorServiceStub();

  beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [
            DisplayService,
            {provide: FrameStateService, useValue: frameStateServiceStub},
            {provide: LoadingIndicatorService, useValue: loadingIndicatorServiceStub},
            ...
        ]
    });
  });
});

我想知道是否有更简单(耗时更少)的方法?

【问题讨论】:

    标签: angular unit-testing jasmine angular-unit-test


    【解决方案1】:

    以下是您可以遵循的最佳做法:

    1. 在名为 mocksTests 的文件夹下有一个模拟测试类列表。不要在每个规范文件中创建一个类。
    2. 您可以直接添加它们,而不是在每个规范文件中实例化类 在 providers 数组中并在 useClass 而不是 useValue 中引用它们。
    3. 您不必担心注入服务的数量,其中每个 注入服务再次有 n 个注入服务。你可以 专注于添加组件/服务的构造函数中使用的服务。
    import { MockFrameStateService } from '../some/path1';
    import { MockLoadingIndicatorService } from '../some/path2';
    
    ...
    
    describe("DisplayService", () => {
       beforeEach(() => {
          TestBed.configureTestingModule({
            providers: [
                DisplayService,
                {provide: FrameStateService, useClass: MockFrameStateService },
                {provide: LoadingIndicatorService, useClass: MockLoadingIndicatorService},
                ...
            ]
        });
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 2017-02-01
      • 2016-04-11
      • 2014-03-09
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      相关资源
      最近更新 更多