#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. О боже!! Я застрял на этом навсегда! Спасибо, что указали на это