Функция Jasmine SpyObj не определена

#angular #mocking #jasmine #karma-jasmine #spy

Вопрос:

Я тестирую компонент, который включает в себя службу. Я хочу поиздеваться над службой. Следуя документации, я настроил свой макет следующим образом:

 describe('DashboardComponent', () => {
  let mockApplicationsService: jasmine.SpyObj<ApplicationsService>;
  const applicationServiceSpy = jasmine.createSpyObj('ApplicationService, ['getApplications']);
  
  beforeEach(
    waitForAsync(() => {
      TestBed.configureTestingModule({
        declaration: [DashboardComponent],
        providers: [
          {
            provide: ApplicationsService,
            useValue: {applicationsServiceSpy}
          }
        ]
      }).compileComponents();
    })

  beforeEach(() => {
    mockApplicationsService = TestBed.inject(ApplicationsService) as jasmine.SpyObj<ApplicationsService>;
    fixture = TestBed.createComponent(DashboardComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  }

  it('should create the app', () => {
    console.log(mockApplicationsService);
    console.log(mockApplicationsService.getApplications);
    expect(component).toBeTruthy();
  })
  
}
 

Когда я запускаю тест, я получаю сообщение об ошибке this.applicationsService.getApplications is not a function . Это означает, что компонент имеет службу приложений, но у него нет вызываемого метода getApplications . Точно так же я вижу в консоли браузера тестового запуска karma, что mockApplicationsService-это объект, вызываемый applicationsServiceSpy с помощью вызываемой функции getApplications . Но возвращается второй журнал консоли undefined .

введите описание изображения здесь

Есть ли что-то, что я делаю неправильно, когда издеваюсь над этой службой?

Комментарии:

1. Да, вы передаете объект в качестве значения для использования, используя сокращение объекта (эквивалентно {applicationsServiceSpy: applicationsServiceSpy} ), а не сам шпион. Вы можете видеть это в том, что вы зарегистрировали.

2. О боже!! Я застрял на этом навсегда! Спасибо, что указали на это