9

Mam składnik, który ma być stosowany w materiale Kątowymi MdDialog:kątowy Materiał i Jasmine: „Nie dostawcą dla InjectionToken MdDialogData!”

@Component({ 
    ... 
}) 
export class MyComponent { 

    constructor(@Inject(MD_DIALOG_DATA) public data: any, public dialogRef: 
MdDialogRef<MyComponent>) { 
... 
    } 


} 

próbuję jednostki przetestować go z Jasmine:

describe('MyComponent',() => { 
    let component: MyComponent; 
    let fixture: ComponentFixture<MyComponent>; 

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

    ... 

}); 

Niestety otrzymuję następujący błąd:

Error: No provider for InjectionToken MdDialogData!

SharedTestingModule importuje nd eksportuje mój niestandardowy moduł Angular Material, który sam importuje i eksportuje MdDialogModule.

Jak mogę pozbyć się tego błędu?

Dziękuję bardzo!

Angular 4.2.4 
Angular Material 2.0.0-beta.7 
Jasmine 2.5.3 

Odpowiedz

22

dodałem to:

providers: [ 
    { provide: MD_DIALOG_DATA, useValue: {} }, 
    { provide: MdDialogRef, useValue: {} } 
] 

I to działa :)

dzięki za pomoc @methgaard!

+0

moja przyjemność, zadowolony, że mogłem Wsparcie! :) – methgaard

5

spróbować

beforeEach(async(() => { 
TestBed.configureTestingModule({ 
    imports: [ 
    SharedTestingModule, 
    ], 
    declarations: [ 
    MyComponent, 
    ], 
    providers: [ <-- here 
    { 
    provide: MdDialogData, 
    useValue: {}, 
    } 
    ] <-- to here 
}) 
.compileComponents(); 
})); 

daj mi znać jak poszło

3

jako aktualizację, to jest również powielane dla tych, którzy używają znaczników z przedrostkiem „mat”

providers: [{provide: MAT_DIALOG_DATA, useValue: {}}, 
{provide: MatDialogRef, useValue: {}}] 
3

Dla kątowej 5 z komponentem najnowszy materiał

providers: [ 
    { provide: MAT_DIALOG_DATA, useValue: {} }, 
    { provide: MatDialogRef, useValue: {} } 
]