Класс юнит-тестов, расширяющий MatDialog - PullRequest
0 голосов
/ 06 ноября 2019

Я использую matDialogs, с базовым значением, которое одинаково для всех диалогов, в нескольких местах моего приложения. Чтобы предотвратить дублирование кода, я создал следующий класс, который расширяет MatDialog:

import { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material';
import { ComponentType } from '@angular/cdk/portal';
import { TemplateRef, Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class CustomMatDialog extends MatDialog {
  open<T, D = any, R = any>(
    componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,
    config?: MatDialogConfig<D>,
  ): MatDialogRef<T, R> {
    let customConfig = { backdropClass: 'md-backdrop' };

    if (config) {
      customConfig = { ...config, ...customConfig };
    }

    return super.open(componentOrTemplateRef, customConfig);
  }
}

Все работает так, как задумано, за исключением юнит-тестов (я использую шутку). Пока они выглядят так:

import { CustomMatDialog } from './custom-mat-dialog';
import {
  MatDialogModule,
} from '@angular/material/dialog';
import { TestBed } from '@angular/core/testing';

describe('CustomMatDialog', () => {
  let customMatDialog: CustomMatDialog;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [MatDialogModule],
      providers: [CustomMatDialog],
    });
    customMatDialog = TestBed.get(CustomMatDialog);
  });

  it('should create an instance', () => {
    expect(customMatDialog).toBeTruthy();
  });
});

После запуска я получаю следующее сообщение об ошибке:

NullInjectorError: StaticInjectorError (DynamicTestModule) [CustomMatDialog -> InjectionToken mat-dialog-scroll-стратегии]: StaticInjectorError (Платформа: ядро) [CustomMatDialog -> InjectionToken mat-dialog-scroll-стратегии]: NullInjectorError: Нет поставщика для InjectionToken mat-dialog-scroll-стратегии!

Я пробовалScrollStrategyOptions и InjectionToken, но я все еще получаю сообщения об ошибках. Что мне нужно импортировать / предоставить / макет для успешного запуска юнит-теста?

...