test: clean up async behaviour

This commit is contained in:
Jovan Krunić
2022-02-22 11:09:22 +01:00
parent 89dc41ad35
commit 37fe25c42f
9 changed files with 188 additions and 199 deletions

View File

@@ -14,7 +14,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
import {TestBed, waitForAsync} from '@angular/core/testing';
import {TestBed} from '@angular/core/testing';
import {Platform} from '@ionic/angular';
@@ -43,68 +43,64 @@ describe('AppComponent', () => {
let platformIsSpy;
let storageProvider: jasmine.SpyObj<StorageProvider>;
beforeEach(
waitForAsync(() => {
platformReadySpy = Promise.resolve();
platformIsSpy = Promise.resolve();
platformSpy = jasmine.createSpyObj('Platform', {
ready: platformReadySpy,
is: platformIsSpy,
});
translateServiceSpy = jasmine.createSpyObj('TranslateService', [
'setDefaultLang',
'use',
]);
thingTranslateServiceSpy = jasmine.createSpyObj('ThingTranslateService', [
'init',
]);
settingsProvider = jasmine.createSpyObj('SettingsProvider', [
'getSettingValue',
'provideSetting',
'setCategoriesOrder',
]);
scheduleSyncServiceSpy = jasmine.createSpyObj('ScheduleSyncService', [
'getDifferences',
'postDifferencesNotification',
]);
configProvider = jasmine.createSpyObj('ConfigProvider', [
'init',
'getAnyValue',
]);
configProvider.getAnyValue = jasmine
.createSpy()
.and.callFake(function () {
return sampleAuthConfiguration;
});
ngxLogger = jasmine.createSpyObj('NGXLogger', ['log', 'error', 'warn']);
storageProvider = jasmine.createSpyObj('StorageProvider', [
'init',
'get',
'has',
'put',
]);
beforeEach(() => {
platformReadySpy = Promise.resolve();
platformIsSpy = Promise.resolve();
platformSpy = jasmine.createSpyObj('Platform', {
ready: platformReadySpy,
is: platformIsSpy,
});
translateServiceSpy = jasmine.createSpyObj('TranslateService', [
'setDefaultLang',
'use',
]);
thingTranslateServiceSpy = jasmine.createSpyObj('ThingTranslateService', [
'init',
]);
settingsProvider = jasmine.createSpyObj('SettingsProvider', [
'getSettingValue',
'provideSetting',
'setCategoriesOrder',
]);
scheduleSyncServiceSpy = jasmine.createSpyObj('ScheduleSyncService', [
'getDifferences',
'postDifferencesNotification',
]);
configProvider = jasmine.createSpyObj('ConfigProvider', [
'init',
'getAnyValue',
]);
configProvider.getAnyValue = jasmine.createSpy().and.callFake(function () {
return sampleAuthConfiguration;
});
ngxLogger = jasmine.createSpyObj('NGXLogger', ['log', 'error', 'warn']);
storageProvider = jasmine.createSpyObj('StorageProvider', [
'init',
'get',
'has',
'put',
]);
TestBed.configureTestingModule({
imports: [
RouterTestingModule.withRoutes([]),
HttpClientTestingModule,
AuthModule,
],
declarations: [AppComponent],
providers: [
{provide: Platform, useValue: platformSpy},
{provide: TranslateService, useValue: translateServiceSpy},
{provide: ThingTranslateService, useValue: thingTranslateServiceSpy},
{provide: ScheduleSyncService, useValue: scheduleSyncServiceSpy},
{provide: SettingsProvider, useValue: settingsProvider},
{provide: ConfigProvider, useValue: configProvider},
{provide: NGXLogger, useValue: ngxLogger},
{provide: StorageProvider, useValue: storageProvider},
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
}),
);
TestBed.configureTestingModule({
imports: [
RouterTestingModule.withRoutes([]),
HttpClientTestingModule,
AuthModule,
],
declarations: [AppComponent],
providers: [
{provide: Platform, useValue: platformSpy},
{provide: TranslateService, useValue: translateServiceSpy},
{provide: ThingTranslateService, useValue: thingTranslateServiceSpy},
{provide: ScheduleSyncService, useValue: scheduleSyncServiceSpy},
{provide: SettingsProvider, useValue: settingsProvider},
{provide: ConfigProvider, useValue: configProvider},
{provide: NGXLogger, useValue: ngxLogger},
{provide: StorageProvider, useValue: storageProvider},
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
});
it('should create the app', () => {
const fixture = TestBed.createComponent(AppComponent);

View File

@@ -14,7 +14,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {CUSTOM_ELEMENTS_SCHEMA, DebugElement} from '@angular/core';
import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing';
import {ComponentFixture, TestBed} from '@angular/core/testing';
import {ActivatedRoute, RouterModule} from '@angular/router';
import {IonRefresher, IonTitle} from '@ionic/angular';
import {
@@ -71,33 +71,31 @@ describe('DataDetailComponent', () => {
'search',
]);
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
RouterModule.forRoot([], {relativeLinkResolution: 'legacy'}),
DataRoutingModule,
DataModule,
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
}),
],
providers: [
{
provide: ActivatedRoute,
useValue: fakeActivatedRoute,
},
{
provide: StorageProvider,
useValue: storageProviderSpy,
},
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
}),
);
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
RouterModule.forRoot([], {relativeLinkResolution: 'legacy'}),
DataRoutingModule,
DataModule,
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
}),
],
providers: [
{
provide: ActivatedRoute,
useValue: fakeActivatedRoute,
},
{
provide: StorageProvider,
useValue: storageProviderSpy,
},
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
});
beforeEach(async () => {
beforeEach(() => {
dataProvider = TestBed.get(DataProvider);
translateService = TestBed.get(TranslateService);
refresher = jasmine.createSpyObj('refresher', ['complete']);
@@ -105,7 +103,7 @@ describe('DataDetailComponent', () => {
Promise.resolve(sampleThing),
);
spyOn(DataDetailComponent.prototype, 'getItem').and.callThrough();
fixture = await TestBed.createComponent(DataDetailComponent);
fixture = TestBed.createComponent(DataDetailComponent);
comp = fixture.componentInstance;
detailPage = fixture.debugElement;
translateService.use('foo');

View File

@@ -1,4 +1,4 @@
import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing';
import {ComponentFixture, TestBed} from '@angular/core/testing';
import {DataListComponent} from './data-list.component';
import {TranslateModule} from '@ngx-translate/core';
@@ -10,21 +10,19 @@ describe('DataListComponent', () => {
let fixture: ComponentFixture<DataListComponent>;
let configProviderMock: jasmine.SpyObj<ConfigProvider>;
beforeEach(
waitForAsync(() => {
configProviderMock = jasmine.createSpyObj('ConfigProvider', {
getValue: () => {
return {lat: 123, lng: 123};
},
});
TestBed.configureTestingModule({
declarations: [DataListComponent],
imports: [TranslateModule.forRoot()],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [{provide: ConfigProvider, useValue: configProviderMock}],
}).compileComponents();
}),
);
beforeEach(() => {
configProviderMock = jasmine.createSpyObj('ConfigProvider', {
getValue: () => {
return {lat: 123, lng: 123};
},
});
TestBed.configureTestingModule({
declarations: [DataListComponent],
imports: [TranslateModule.forRoot()],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [{provide: ConfigProvider, useValue: configProviderMock}],
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(DataListComponent);

View File

@@ -14,7 +14,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing';
import {ComponentFixture, TestBed} from '@angular/core/testing';
import {ActivatedRoute, RouterModule} from '@angular/router';
import {IonRefresher} from '@ionic/angular';
import {
@@ -72,43 +72,41 @@ describe('DaiaAvailabilityComponent', () => {
'search',
]);
beforeEach(
waitForAsync(() => {
configProviderMock = jasmine.createSpyObj('ConfigProvider', [
'init',
'getValue',
'getAnyValue',
]);
TestBed.configureTestingModule({
imports: [
RouterModule.forRoot([], {relativeLinkResolution: 'legacy'}),
HebisRoutingModule,
HebisModule,
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
}),
LoggerModule,
],
providers: [
{
provide: ActivatedRoute,
useValue: fakeActivatedRoute,
},
{
provide: StorageProvider,
useValue: storageProviderSpy,
},
{
provide: ConfigProvider,
useValue: configProviderMock,
},
NGXLogger,
LoggerConfig,
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
}),
);
beforeEach(() => {
configProviderMock = jasmine.createSpyObj('ConfigProvider', [
'init',
'getValue',
'getAnyValue',
]);
TestBed.configureTestingModule({
imports: [
RouterModule.forRoot([], {relativeLinkResolution: 'legacy'}),
HebisRoutingModule,
HebisModule,
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
}),
LoggerModule,
],
providers: [
{
provide: ActivatedRoute,
useValue: fakeActivatedRoute,
},
{
provide: StorageProvider,
useValue: storageProviderSpy,
},
{
provide: ConfigProvider,
useValue: configProviderMock,
},
NGXLogger,
LoggerConfig,
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
});
beforeEach(async () => {
dataProvider = TestBed.get(DaiaDataProvider);

View File

@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion,@typescript-eslint/no-explicit-any */
/*
* Copyright (C) 2018, 2019 StApps
* This program is free software: you can redistribute it and/or modify it
@@ -13,8 +12,9 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
/* eslint-disable @typescript-eslint/no-non-null-assertion,@typescript-eslint/no-explicit-any */
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing';
import {ComponentFixture, TestBed} from '@angular/core/testing';
import {ActivatedRoute, RouterModule} from '@angular/router';
import {IonRefresher} from '@ionic/angular';
import {
@@ -69,33 +69,31 @@ describe('HebisDetailComponent', () => {
'search',
]);
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
RouterModule.forRoot([], {relativeLinkResolution: 'legacy'}),
HebisRoutingModule,
HebisModule,
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
}),
],
providers: [
{
provide: ActivatedRoute,
useValue: fakeActivatedRoute,
},
{
provide: StorageProvider,
useValue: storageProviderSpy,
},
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
}),
);
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
RouterModule.forRoot([], {relativeLinkResolution: 'legacy'}),
HebisRoutingModule,
HebisModule,
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
}),
],
providers: [
{
provide: ActivatedRoute,
useValue: fakeActivatedRoute,
},
{
provide: StorageProvider,
useValue: storageProviderSpy,
},
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
});
beforeEach(async () => {
beforeEach(() => {
dataProvider = TestBed.get(HebisDataProvider);
translateService = TestBed.get(TranslateService);
refresher = jasmine.createSpyObj('refresher', ['complete']);
@@ -103,7 +101,7 @@ describe('HebisDetailComponent', () => {
Promise.resolve(sampleThing),
);
spyOn(HebisDetailComponent.prototype, 'getItem').and.callThrough();
fixture = await TestBed.createComponent(HebisDetailComponent);
fixture = TestBed.createComponent(HebisDetailComponent);
comp = fixture.componentInstance;
translateService.use('foo');
fixture.detectChanges();

View File

@@ -12,6 +12,7 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
/* eslint-disable @typescript-eslint/no-non-null-assertion,@typescript-eslint/ban-ts-comment */
import {
APP_BASE_HREF,
CommonModule,
@@ -36,22 +37,21 @@ import {FilterContext, SortContext} from './context-type';
import {Component} from '@angular/core';
import {By} from '@angular/platform-browser';
// prettier-ignore
@Component({
template: `
<ion-content id="foo"></ion-content>
<stapps-context contentId="foo"></stapps-context>
`,
template: `<ion-content id="foo"></ion-content
><stapps-context contentId="foo"></stapps-context>
`,
})
class ContextMenuComponentContainer {
}
class ContextMenuContainerComponent {}
describe('ContextMenuComponent', async () => {
let fixture: ComponentFixture<ContextMenuComponentContainer>;
let fixture: ComponentFixture<ContextMenuContainerComponent>;
let instance: ContextMenuComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ContextMenuComponent, ContextMenuComponentContainer],
declarations: [ContextMenuComponent, ContextMenuContainerComponent],
providers: [
ChildrenOutletContexts,
Location,
@@ -70,8 +70,10 @@ describe('ContextMenuComponent', async () => {
],
}).compileComponents();
fixture = TestBed.createComponent(ContextMenuComponentContainer);
instance = fixture.debugElement.query(By.directive(ContextMenuComponent)).componentInstance;
fixture = TestBed.createComponent(ContextMenuContainerComponent);
instance = fixture.debugElement.query(
By.directive(ContextMenuComponent),
).componentInstance;
});
it('should show items in sort context', () => {

View File

@@ -27,11 +27,11 @@ describe('ContextMenuService', () => {
});
it('should update filterQuery', done => {
service.filterContextChanged$.subscribe(() => {
service.contextFilterChanged(filterContext);
});
service.filterQueryChanged$.subscribe(result => {
service.filterContextChanged$.subscribe(result => {
expect(result).toBeDefined();
expect(service.contextFilter.options[0].buckets.length).toEqual(
filterContext.options[0].buckets.length,
);
done();
});
service.updateContextFilter(facetsMock);
@@ -46,10 +46,7 @@ describe('ContextMenuService', () => {
});
it('should update sortQuery', done => {
service.sortContextChanged$.subscribe(() => {
service.contextSortChanged(sortContext);
});
service.sortQueryChanged$.subscribe(result => {
service.sortContextChanged$.subscribe(result => {
expect(result).toBeDefined();
done();
});

View File

@@ -14,7 +14,7 @@
*/
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {ComponentFixture, TestBed} from '@angular/core/testing';
import {HttpClientTestingModule} from '@angular/common/http/testing';
import {RouterTestingModule} from '@angular/router/testing';
import {AuthModule} from '../../auth/auth.module';
@@ -30,7 +30,7 @@ describe('ProfilePage', () => {
let configProvider: ConfigProvider;
let storageProvider: jasmine.SpyObj<StorageProvider>;
beforeEach(async(() => {
beforeEach(() => {
configProvider = jasmine.createSpyObj('ConfigProvider', [
'init',
'getAnyValue',
@@ -59,7 +59,7 @@ describe('ProfilePage', () => {
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
}));
});
beforeEach(() => {
fixture = TestBed.createComponent(ProfilePageComponent);

View File

@@ -13,7 +13,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-ts-comment */
import {TestBed} from '@angular/core/testing';
import {Storage} from '@ionic/storage-angular';
import {StorageModule} from './storage.module';
@@ -52,7 +52,7 @@ describe('StorageProvider', () => {
it('should call ready method of storage on init', async () => {
// @ts-ignore
spyOn(storage, 'create').and.callFake(() => Promise.resolve(undefined));
spyOn(storage, 'create').and.callFake(() => Promise.resolve());
await storageProvider.init();
expect(storage.create).toHaveBeenCalled();
@@ -69,9 +69,9 @@ describe('StorageProvider', () => {
spyOn(storage, 'get').and.callFake(() => Promise.resolve());
try {
await storageProvider.get('some-uid');
} catch {
// if not caught, causes issues and tests fail
}
// if not caught, causes issues and tests fail
catch {}
expect(storage.get).toHaveBeenCalledWith('some-uid');
});
@@ -144,7 +144,9 @@ describe('StorageProvider', () => {
});
it('should delete one or more entries from the storage', async () => {
const storageRemoveSpy = spyOn(storage, 'remove').and.callFake(() => Promise.resolve());
const storageRemoveSpy = spyOn(storage, 'remove').and.callFake(() =>
Promise.resolve(),
);
await storageProvider.delete('bar');
expect(storage.remove).toHaveBeenCalledTimes(1);