Как смоделировать модель в angular

У меня есть функция, которая принимает модель в качестве входных данных

  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;

}

Fault это класс или интерфейс?

Florian 01.03.2019 14:18

это ошибка в интерфейсе экспорта интерфейса, я обновил вопрос

JaChNo 01.03.2019 14:19

ааа понял, спасибо

JaChNo 01.03.2019 14:36

почему вы используете провайдера для te Fault? Это не вводится в службу, верно? Вы можете просто использовать его как объект в тесте, верно?

Jefiozie 01.03.2019 14:38

@JaChNo: ваш компонент не зависит от вашей модели Fault. Это означает, что вам не нужно объявлять его в массиве providers. Свойства вашего интерфейса не могут принимать значения NULL, поэтому не забудьте создать объект с каждым свойством Fault, когда вы вызываете свой selectFault в своих тестах.

Florian 01.03.2019 14:42
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
5
55
1

Ответы 1

  1. Удалить { provide: Fault, useValue: faultStub } . Вам не нужно внедрять интерфейс в providers

  2. Удалить 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();
    });
    

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