Ответ 1
Я добавил:
providers: [
{ provide: MD_DIALOG_DATA, useValue: {} },
{ provide: MdDialogRef, useValue: {} }
]
И это работает :)
Спасибо за вашу помощь @methgaard!
У меня есть компонент, который предназначен для использования в угловом материале MdDialog:
@Component({
...
})
export class MyComponent {
constructor(@Inject(MD_DIALOG_DATA) public data: any, public dialogRef:
MdDialogRef<MyComponent>) {
...
}
}
Я пытаюсь Unit Test it with Jasmine:
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
SharedTestingModule,
],
declarations: [
MyComponent,
],
})
.compileComponents();
}));
...
});
К сожалению, я получаю следующую ошибку:
Ошибка: нет провайдера для InjectionToken MdDialogData!
SharedTestingModule импортирует и экспортирует мой пользовательский модуль Angular Material, который сам импортирует и экспортирует MdDialogModule.
Как я могу избавиться от этой ошибки?
Большое спасибо!
Angular 4.2.4
Angular Material 2.0.0-beta.7
Jasmine 2.5.3
Я добавил:
providers: [
{ provide: MD_DIALOG_DATA, useValue: {} },
{ provide: MdDialogRef, useValue: {} }
]
И это работает :)
Спасибо за вашу помощь @methgaard!
Для угловых 5 с последним компонентом материала
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
а также
providers: [
{ provide: MAT_DIALOG_DATA, useValue: {} },
{ provide: MatDialogRef, useValue: {} }
]
как обновление, это также реплицируется для тех, кто использует теги с префиксом "Мат",
providers: [{provide: MAT_DIALOG_DATA, useValue: {}},
{provide: MatDialogRef, useValue: {}}]
попробуй это
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
SharedTestingModule,
],
declarations: [
MyComponent,
],
providers: [ <-- here
{
provide: MdDialogData,
useValue: {},
}
] <-- to here
})
.compileComponents();
}));
дайте мне знать, как это происходит
Вы можете ввести MAT_DIALOG_DATA/MAT_BOTTOM_SHEET_DATA в тестах жасмина без указания поставщика. Вы должны просто убедиться, что вводимое значение не является нулевым. если это значение равно null, компилятор ошибочно принимает значение NULL для несуществующего поставщика, и вы получаете ошибку поставщика не найдена.