From 8f518d1b79a66b4ccb5df387d251be1fcc9253c7 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Mon, 14 Nov 2022 14:53:14 +0100 Subject: [PATCH] MOBILE-4065 tests: Fix translate mock --- src/testing/utils.ts | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/testing/utils.ts b/src/testing/utils.ts index 18acf31a3..0072cb595 100644 --- a/src/testing/utils.ts +++ b/src/testing/utils.ts @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { AbstractType, Component, CUSTOM_ELEMENTS_SCHEMA, Type, ViewChild } from '@angular/core'; +import { AbstractType, Component, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, Type, ViewChild } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { Observable, Subject } from 'rxjs'; +import { Observable, of, Subject } from 'rxjs'; import { sep } from 'path'; import { CORE_SITE_SCHEMAS } from '@services/sites'; @@ -33,7 +33,7 @@ import { TranslateService, TranslateStore } from '@ngx-translate/core'; import { CoreIonLoadingElement } from '@classes/ion-loading'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { DefaultUrlSerializer, UrlSerializer } from '@angular/router'; -import { CoreUtils } from '@services/utils/utils'; +import { CoreUtils, CoreUtilsProvider } from '@services/utils/utils'; abstract class WrapperComponent { @@ -45,8 +45,14 @@ type ServiceInjectionToken = AbstractType | Type | string; let testBedInitialized = false; const textUtils = new CoreTextUtilsProvider(); -const DEFAULT_SERVICE_SINGLETON_MOCKS: [CoreSingletonProxy, Record][] = [ - [Translate, mock({ instant: key => key })], +const DEFAULT_SERVICE_SINGLETON_MOCKS: [CoreSingletonProxy, unknown][] = [ + [Translate, mock({ + instant: key => key, + get: key => of(key), + onTranslationChange: new EventEmitter(), + onLangChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter(), + })], [CoreDB, mock({ getDB: () => mock() })], [CoreNavigator, mock({ navigateToSitePath: () => Promise.resolve(true) })], [ApplicationInit, mock({ @@ -66,7 +72,7 @@ const DEFAULT_SERVICE_SINGLETON_MOCKS: [CoreSingletonProxy, Record Promise.resolve(mock({ dismiss: jest.fn() })), })], - [CoreUtils, mock({ + [CoreUtils, mock(new CoreUtilsProvider(), { nextTick: () => Promise.resolve(), })], ]; @@ -273,8 +279,17 @@ export function mockSingleton( const methods = Array.isArray(methodsOrProperties) ? methodsOrProperties : []; const instance = getServiceInstance(singleton.injectionToken) as T; const mockInstance = mock(instance, methods); + const mockInstancePrototype = Object.getPrototypeOf(mockInstance); - Object.assign(mockInstance as Record, properties); + for (const [name, value] of Object.entries(properties)) { + const descriptor = Object.getOwnPropertyDescriptor(mockInstancePrototype, name); + + if (descriptor && !descriptor.writable) { + continue; + } + + mockInstance[name] = value; + } singleton.setInstance(mockInstance);