Я использую 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
, но я все еще получаю сообщения об ошибках. Что мне нужно импортировать / предоставить / макет для успешного запуска юнит-теста?