Как внедрить MatDialog в тестовый модуль? - PullRequest
0 голосов
/ 25 мая 2019

Я добавил MatDialog в свой компонент, и теперь все мои модульные тесты завершаются с ошибкой

Ошибка: StaticInjectorError (DynamicTestModule) [BiqWorkflowEditorComponent -> MatDialog]: StaticInjectorError (Платформа: core) [BiqWorkflowEditorC> MatDialog]: NullInjectorError: Нет поставщика для MatDialog!

Мой компонент

 constructor(public dialog: MatDialog, private renderer: Renderer2, private logService: LogService)

Мой диалог

 constructor(
    public dialogRef: MatDialogRef<VisualPropertiesModalComponent>,
    @Inject(MAT_DIALOG_DATA) public data: Dictionary<string, string>)
  {
  }

Мой тест

import {MatDialogModule} from '@angular/material/dialog';

describe('BiqWorkflowEditor.Component', () =>
{
  let component: BiqWorkflowEditorComponent;
  let fixture: ComponentFixture<BiqWorkflowEditorComponent>;
  let dialog: MatDialog;

  beforeEach(async(() =>
  {
    TestBed.configureTestingModule({
      declarations: [
        BiqWorkflowEditorComponent,
      ],
      imports: [
        MatDialogModule
      ],
      providers: [ 
        MatDialog
      ]
    })
    .compileComponents();
  }));

  beforeEach(() =>
  {
    fixture = TestBed.createComponent(BiqWorkflowEditorComponent);
    component = fixture.componentInstance;

    dialog = TestBed.get(MatDialog);

    fixture.detectChanges();
  });

  it('should create', () =>
  {
    expect(component).toBeTruthy();
  });
});

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

На самом деле код, которым я поделился в вопросе, работает, проблема заключалась в том, что я получал ту же ошибку в другом тестовом файле после того, как исправил ее в одном файле, и я не заметил, что это происходит в другом файле.Извините за ложную тревогу: (.

0 голосов
/ 25 мая 2019

попробуйте это (вам нужны фиктивные провайдеры):

import {MatDialogModule} from '@angular/material/dialog';

describe('BiqWorkflowEditor.Component', () =>
{
  let component: BiqWorkflowEditorComponent;
  let fixture: ComponentFixture<BiqWorkflowEditorComponent>;
  let dialog: MatDialog;
  const mockMatDialog = {
    closeAll: (): void => undefined
  };
  beforeEach(async(() =>
  {
    const mockProviders: Provider[] = [
        { provide: MatDialog, useValue: mockMatDialog }
      ];
    TestBed.configureTestingModule({
      declarations: [
        BiqWorkflowEditorComponent,
      ],
      imports: [
        MatDialogModule
      ],
      providers: mockProviders
    })
    .compileComponents();
  }));

  beforeEach(() =>
  {
    fixture = TestBed.createComponent(BiqWorkflowEditorComponent);
    component = fixture.componentInstance;

    dialog = TestBed.get(MatDialog);

    fixture.detectChanges();
  });

  it('should create', () =>
  {
    expect(component).toBeTruthy();
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...