Seems that problem was related if class property was initialized with localized value. Moving instant method usage in constructor fixed this issue.
Yes that code works on our main angular application but not in library projects. Not sure why.
There was another NullInjectorError I ran into: NullInjectorError: R3InjectorError(DynamicTestModule)[InjectionToken QUEUE_MANAGER -> InjectionToken QUEUE_MANAGER]: NullInjectorError: No provider for InjectionToken QUEUE_MANAGER! error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'InjectionToken QUEUE_MANAGER', 'InjectionToken QUEUE_MANAGER' ] }) NullInjectorError: R3InjectorError(DynamicTestModule)[InjectionToken QUEUE_MANAGER -> InjectionToken QUEUE_MANAGER]: NullInjectorError: No provider for InjectionToken QUEUE_MANAGER! at NullInjector.get (node_modules/@angular/core/fesm2020/core.mjs:7498:27) at R3Injector.get (node_modules/@angular/core/fesm2020/core.mjs:7919:33) at R3Injector.get (node_modules/@angular/core/fesm2020/core.mjs:7919:33) at ChainedInjector.get (node_modules/@angular/core/fesm2020/core.mjs:12077:36) at lookupTokenUsingModuleInjector (node_modules/@angular/core/fesm2020/core.mjs:3206:39) at getOrCreateInjectable (node_modules/@angular/core/fesm2020/core.mjs:3251:12) at Module.ɵɵdirectiveInject (node_modules/@angular/core/fesm2020/core.mjs:10034:12) at NodeInjectorFactory.factory (node_modules/@abp/ng.core/fesm2020/abp-ng.core.mjs:57:110) at getNodeInjectable (node_modules/@angular/core/fesm2020/core.mjs:3436:44) at instantiateAllDirectives (node_modules/@angular/core/fesm2020/core.mjs:10990:27)
Similarly I could fix this by providing "QUEUE_MANAGER" in test.
When I provide that token, there still problem with LocalizationService instant method throwing exception:
TypeError: Cannot read properties of undefined (reading 'instant') at new VendorPurchasesComponent (projects/SCM.Analytics/projects/analytics/src/lib/vendor/components/vendor-purchases/vendor-purchases.component.ts:21:54) at NodeInjectorFactory.factory (ng:///VendorPurchasesComponent/ɵfac.js:4:10) at getNodeInjectable (node_modules/@angular/core/fesm2020/core.mjs:3436:44) at createRootComponent (node_modules/@angular/core/fesm2020/core.mjs:12289:35) at ComponentFactory.create (node_modules/@angular/core/fesm2020/core.mjs:12170:25) at apply (node_modules/@angular/core/fesm2020/testing.mjs:24238:51) at _ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:412:30) at ProxyZoneSpec.onInvoke (node_modules/zone.js/fesm2015/zone-testing.js:287:39) at _ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:411:56) at Object.onInvoke (node_modules/@angular/core/fesm2020/core.mjs:24178:33)
Providing mock version of LocalizationService does not fix this which is odd.
import { CoreTestingModule } from '@abp/ng.core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { VendorPurchasesComponent } from './vendor-purchases.component';
describe('VendorPurchasesComponent', () => { let component: VendorPurchasesComponent; let fixture: ComponentFixture<VendorPurchasesComponent>;
beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [VendorPurchasesComponent], imports: [CoreTestingModule.withConfig()] }).compileComponents(); });
beforeEach(() => { fixture = TestBed.createComponent(VendorPurchasesComponent); component = fixture.componentInstance; fixture.detectChanges(); });
it('should create', () => { expect(component).toBeTruthy(); }); });
If I add providers:
import { INCUDE_LOCALIZATION_RESOURCES_TOKEN, LocalizationService } from '@abp/ng.core'; import { CoreTestingModule } from '@abp/ng.core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { VendorPurchasesComponent } from './vendor-purchases.component';
describe('VendorPurchasesComponent', () => { let component: VendorPurchasesComponent; let fixture: ComponentFixture<VendorPurchasesComponent>;
beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [VendorPurchasesComponent], imports: [CoreTestingModule.withConfig()], providers: [ LocalizationService, { provide: INCUDE_LOCALIZATION_RESOURCES_TOKEN, useValue: false }] }).compileComponents(); });
beforeEach(() => { fixture = TestBed.createComponent(VendorPurchasesComponent); component = fixture.componentInstance; fixture.detectChanges(); });
it('should create', () => { expect(component).toBeTruthy(); }); });
I still get error from LocalizationService instant method:
TypeError: Cannot read properties of undefined (reading 'instant') at new VendorPurchasesComponent (projects/SCM.Analytics/projects/analytics/src/lib/vendor/components/vendor-purchases/vendor-purchases.component.ts:21:54) at NodeInjectorFactory.factory (ng:///VendorPurchasesComponent/ɵfac.js:4:10) at getNodeInjectable (node_modules/@angular/core/fesm2020/core.mjs:3436:44) at createRootComponent (node_modules/@angular/core/fesm2020/core.mjs:12289:35) at ComponentFactory.create (node_modules/@angular/core/fesm2020/core.mjs:12170:25) at apply (node_modules/@angular/core/fesm2020/testing.mjs:24238:51) at _ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:412:30) at ProxyZoneSpec.onInvoke (node_modules/zone.js/fesm2015/zone-testing.js:287:39) at _ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:411:56) at Object.onInvoke (node_modules/@angular/core/fesm2020/core.mjs:24178:33)