Ошибка тестирования модуля Карма: Неожиданное значение, импортированное модулем. Пожалуйста, добавьте аннотацию @NgModule

Я создал новый новый компонент через:

ng g mytest1

Затем я изменил строку конструктора так:

constructor(private dialogRef: MatDialogRef<Mytest1Component>) { }

и добавил необходимый импорт:

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

После этого я запустил тестовый проект Karma через:

ng test

Тест не пройден. Я получил это сообщение об ошибке:

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

Чтобы исправить это, я добавил оператор Import в разделе beforeEach:

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

//...

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [ Mytest1Component ],
        imports: [MatDialogRef],
    })
    .compileComponents();
}));

Теперь я получил эту новую ошибку, которую я не могу исправить:

Ошибка: неожиданное значение 'MatDialogRef', импортированное модулем 'DynamicTestModule'. Пожалуйста, добавьте аннотацию @NgModule.

Может кто-нибудь уточнить, где я должен добавлять аннотацию @NgModule, или я сделал что-то не так?

Спасибо.

2 ответа

Решение

Вы вводите MatDialogRef в компоненте:

constructor(private dialogRef: MatDialogRef<Mytest1Component>) { }

Таким образом, testBed ожидает ввода того же provider в TestBed. Или вы также можете предоставить MockDialogueService к этому.

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [ Mytest1Component ],
        providers: [ MatDialogRef ],
    })
    .compileComponents();
}));

Использовать :

imports: [MatDialogModule],

вместо

Я столкнулся с той же проблемой, в спецификациях укажите xdescribe вместо описания. Это решило проблему.

Другие вопросы по тегам