GOOGLE ADS

четверг, 28 апреля 2022 г.

Угловой модульный тест - свойство в фиктивной службе не определено

Я модульное тестирование презентационного компонента. У одного из его сервисов, над которым я издеваюсь, есть свойство 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 }]

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

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...