Я запускаю модульное тестирование, которое не проходит. Пожалуйста, посмотрите на мой код:
Это мой файл машинописи:
allData: any;
constructor(@Inject(MAT_DIALOG_DATA) private data,
private dialogRef: MatDialogRef<MyComponent>,
private _service: SampleService,
private _router: Router) {
}
ngOnInit() {
this.loadValue();
}
loadValue() {
this._service.returnData().subscribe(res => {
this.allData = res;
})
}
Это моя реализация файла службы:
//SampleService
returnData(){
const users=[{ id: "01", name:"Andrew" }, { id: "02", name:"Shaun" }];
return of(users);
}
Это мой файл спецификации:
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
let el: DebugElement;
let sampleservice: SampleService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
imports: [MatDialogModule],
providers: [
{
provide: MAT_DIALOG_DATA, useValue: { action: "add" },
},
{
provide: MatDialogRef, useValue: { MyComponent}
},
{
provide: Router
},
{
provide: SampleService
}
]
}).compileComponents()
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
el = fixture.debugElement;
component = fixture.componentInstance;
sampleservice = new SampleService();
})
Мой контрольный пример:
it("should call the loadvalue and fill the allData", () => {
let users = [{ id: "01", name: "John" }, { id: "02", name: "Wick" }];
component.loadValue();
spyOn(sampleservice, 'returnData').and.returnValue(of(users));
expect(component.allData).toBe(users);
})
Я хочу вызватьloadvalue()
и ожидаем, что переменная allData
заполнится фиктивным ответом, используя spyOn
. Но когда я запускаю этот тестовый пример, я получаю сообщение об ошибке:
TypeError: Не удается прочитать свойство 'returnData' из неопределенного
Что я делаю здесь неправильно? Любая помощь приветствуется. Спасибо!