У меня есть функция, которая принимает модель в качестве входных данных
selectFault(fault: Fault) {
this.faultsService.setSelectedFault(fault)
this.router.navigate(['fault-detail']);
}
Я сгенерировал для него тест, но он жалуется на заглушку ошибки
error TS2693: 'Fault' only refers to a type, but is being used as a value here.
строка, на которую он жалуется,
{ provide: Fault, useValue: faultStub }
весь тест ниже для полноты
Итак, как мне обновить ошибку, чтобы перейти к моей функции?
let component: Tab1Page;
let fixture: ComponentFixture<Tab1Page>;
beforeEach(() => {
const routerStub = { navigate: () => ({}) };
const faultsServiceStub = {
getFaults: () => ({ subscribe: () => ({}) }),
invalidateCache: () => ({}),
setSelectedFault: () => ({})
};
const faultStub = {};
TestBed.configureTestingModule({
schemas: [NO_ERRORS_SCHEMA],
declarations: [Tab1Page],
providers: [
{ provide: Router, useValue: routerStub },
{ provide: FaultsService, useValue: faultsServiceStub },
{ provide: Fault, useValue: faultStub }
]
});
fixture = TestBed.createComponent(Tab1Page);
component = fixture.componentInstance;
});
it('can load instance', () => {
expect(component).toBeTruthy();
});
describe('selectFault', () => {
it('makes expected calls', () => {
const routerStub: Router = fixture.debugElement.injector.get(Router);
const faultsServiceStub: FaultsService = fixture.debugElement.injector.get(
FaultsService
);
const faultStub: Fault = fixture.debugElement.injector.get(Fault);
spyOn(routerStub, 'navigate');
spyOn(faultsServiceStub, 'setSelectedFault');
component.selectFault(faultStub);
expect(routerStub.navigate).toHaveBeenCalled();
expect(faultsServiceStub.setSelectedFault).toHaveBeenCalled();
});
});
и это моя вина
export interface Fault {
description: string;
title: string;
assignee_id: Number;
id: string;
}
это ошибка в интерфейсе экспорта интерфейса, я обновил вопрос
ааа понял, спасибо
почему вы используете провайдера для te Fault? Это не вводится в службу, верно? Вы можете просто использовать его как объект в тесте, верно?
@JaChNo: ваш компонент не зависит от вашей модели Fault. Это означает, что вам не нужно объявлять его в массиве providers. Свойства вашего интерфейса не могут принимать значения NULL, поэтому не забудьте создать объект с каждым свойством Fault, когда вы вызываете свой selectFault в своих тестах.





Удалить { provide: Fault, useValue: faultStub } . Вам не нужно внедрять интерфейс в providers
Удалить const faultStub: Fault = fixture.debugElement.injector.get(Fault); . Вы можете просто определить значение и передать его как показано ниже:
it('makes expected calls', () => {
const routerStub: Router = fixture.debugElement.injector.get(Router);
const faultsServiceStub: FaultsService = fixture.debugElement.injector.get(
FaultsService
);
const faultStub: Fault = { id: '1', assignee_id : 11 , title : 'Test Title', description: 'Sample Description' };
spyOn(routerStub, 'navigate');
spyOn(faultsServiceStub, 'setSelectedFault');
component.selectFault(faultStub);
expect(routerStub.navigate).toHaveBeenCalled();
expect(faultsServiceStub.setSelectedFault).toHaveBeenCalled();
});
Faultэто класс или интерфейс?