Я модульное тестирование презентационного компонента. У одного из его сервисов, над которым я издеваюсь, есть свойство getter, user. Этот компонент происходит от другого. В ngOnInit его родителя осуществляется доступ к пользовательскому свойству sessionService, и оно терпит неудачу, поскольку находит его неопределенным. Какой еще подход попробовать здесь?
describe('MyComponent', () => {
let component: MyComponent, fixture: ComponentFixture<MyComponent>, el: DebugElement;
beforeEach(
waitForAsync(() => {
const sessionService = jasmine.createSpyObj('SessionService', ['']);
Object.defineProperty(sessionService, 'user', {
value: of(
new User()
)
});
TestBed.configureTestingModule({
declarations: [MyComponent],
imports: [...],
providers: [
{ provide: SessionService, useValue: sessionService }
]
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
el = fixture.debugElement;
});
})
);
it('should have prev/next buttons', () => {
fixture.detectChanges();
console.log(el.nativeElement.outerHTML);
});
});
Решение проблемы
В этом случае вы всегда можете создать фиктивный класс вместо файла jasmine.createSpyObj. Я никогда gettersраньше не издевался, но я думаю, что иногда лучше пойти на фиктивный урок, чем jasmine.createSpyObj.
Попробуй это:
class MockSessionService {
get user() {
return of(new User());
}
}
....
providers: [{ provide: SessionService, useClass: MockSessionService }]
Комментариев нет:
Отправить комментарий