Нет провайдера для MockDialogRef - PullRequest
       36

Нет провайдера для MockDialogRef

0 голосов
/ 11 февраля 2019

Вот конструктор компонента:

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

Вот тестовый стенд:

TestBed.configureTestingModule({
  imports: [ MatDialogModule ],
  declarations: [ TaskActionModalContainer ],
  schemas: [
    CUSTOM_ELEMENTS_SCHEMA
  ],
  providers: [
    {
      provide: MatDialogRef,
      useValue: {},
    },
    {
      provide: MAT_DIALOG_DATA,
      useValue: {}
    }
  ]
})
.compileComponents();

Вот ошибка:

StaticInjectorError(DynamicTestModule)[TaskActionModalContainer -> MatDialogRef]: 
  StaticInjectorError(Platform: core)[TaskActionModalContainer -> MatDialogRef]: 
    NullInjectorError: No provider for MatDialogRef!

Я искал все выше и нижеи вижу эту ошибку NullInjector везде, но я продолжаю ее получать.Я думал, что угловой гуру может решить эту проблему быстро.

Помощь!

РЕДАКТИРОВАТЬ:

Я также использовал useClass безуспешно.

Интересно, что у меня также есть это:

  beforeEach(inject(
    [
      MatDialogRef,
      MAT_DIALOG_DATA
    ],
    (
      dialogRef,
      dialogData
    ) => {
    console.log(dialogRef);
    console.log(dialogData);
  }));

, и я вижу эти console.log при запуске теста .... прямо перед тем, как он показывает мне ошибку в TestBed.createComponent

РЕДАКТИРОВАТЬ # 2 - я чувствую, что это потому, что это элемент entry, который я понятия не имею, что это значит, но это один.У меня есть ModalContainer, который выскакивает этот (так что я думаю, что это динамически созданный) - любая помощь там?

Ошибочно закрыл это как дурак, мой был о модульном тестировании, поэтому ответ немного более нюансирован.

1 Ответ

0 голосов
/ 12 февраля 2019

Для всех, кто столкнулся с этой проблемой во время модульного тестирования, ответ в комментариях был очень близок к ответу на мой вопрос, но реальная сделка заключается в том, что и файл спецификации, и файл компонента должны импортировать MatDialogRef и MAT_DIALOG_DATA из одного места -@angular/material/dialog

Мой компонент выглядел так:

import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';

, и мой тест выглядел так:

import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';

Изменение импорта компонентов для соответствия моему тесту исправило его!

...