Обновление:
Кажется, проблема с FileReader. Нашел эту ссылку
Может кто-нибудь подсказать, как мне написать модульный тест для вещи, связанной с FileReader
У меня есть экземпляр, где у меня есть обратный вызов внутри наблюдаемого обратного вызова подписки.
Component.ts
public ngOnInit(): void {
this.subscriptions.push(this.route.paramMap.subscribe((params: ParamMap) => {
this.service.getAttachment()
.subscribe(response => {
this.convertBlobToBase46String(response.contentBytes,
async (data) => {
this.fileData = data;
});
this.isAttachmentLoadingCompleted = true;
}, error => {
this.isAttachmentLoadingCompleted = true;
this.loggingServie.logError(error, 'Error occurred while fetching attachment.');
});
}));
}
private convertBlobToBase46String(resp, callback) {
const reader = new FileReader();
reader.onload = function () {
callback(reader.result);
};
reader.readAsDataURL(resp);
}
public isAttachmentVisible(): boolean {
if (this.fileData != null && this.isAttachmentLoadingCompleted) {
return true;
}
return false;
}
component.spe c .ts
it('should hide attachment if attachment is not visible', fakeAsync(() => {
let content = "Hello World";
let data = new Blob([content], { type: 'text/plain' });
let arrayOfBlob = new Array<Blob>();
arrayOfBlob.push(data);
let file = new File(arrayOfBlob, "Mock.svc");
spyOn(service, 'getAttachment').and
.returnValue(Observable.of({ mimeType: 'text/plain', contentBytes: file }));
component.ngOnInit();
fixture.detectChanges();
tick(40);
const returnValue = component.isAttachmentVisible();
expect(returnValue).toBe(true);
}));
Здесь fileData
устанавливается внутри функции обратного вызова и используется в isAttachmentVisible()
метод, поэтому он должен ждать завершения обратного вызова. Но он не ждет этого, хотя я увеличил значение тика, он вызывает isAttachmentVisible()
перед установкой fileData