Я хочу проверить свою библиотеку.Он потребляет InjectionToken APP_BASE_HREF
, но когда я начинаю свой тест, я получаю эту NullInjectorError.
Так как Injector.get()
устарела, мне пришлось использовать Injector.get<T>()
cookie-monster-provider.ts
import {CookieOptions} from './ngx-cookie-monster-options.model';
import {Inject, Injectable, InjectionToken, Injector, Type} from '@angular/core';
import {APP_BASE_HREF} from '@angular/common';
import {merge} from './ngx-cookie-monster-ext';
export const COOKIE_OPTIONS = new InjectionToken<CookieOptions>('COOKIE_OPTIONS');
@Injectable()
export class NgxCookieMonsterProvider {
private defaultCookieOptions: CookieOptions;
constructor(@Inject(COOKIE_OPTIONS) options: CookieOptions = {}, private _injector: Injector) {
this.defaultCookieOptions = {
path: this._injector.get<string>(APP_BASE_HREF + '/' as Type<string>),
domain: null,
expires: null,
secure: false,
httpOnly: false,
sameSite: 'none'
};
this._cookieOptions = merge(this.defaultCookieOptions, options);
}
private _cookieOptions: CookieOptions;
get cookieOptions(): CookieOptions {
return this._cookieOptions;
}
}
cookie-monster.module.ts
import {ModuleWithProviders, NgModule} from '@angular/core';
import {CookieOptions} from './ngx-cookie-monster-options.model';
import {COOKIE_OPTIONS, NgxCookieMonsterProvider} from './ngx-cookie-monster-provider';
import {NgxCookieMonsterService} from './ngx-cookie-monster.service';
import {ngxCookieMonsterFactory} from './ngx-cookie-monster-factory';
import {APP_BASE_HREF} from "@angular/common";
@NgModule({
providers: [NgxCookieMonsterProvider]
})
export class CookieModule {
/**
* Use this method to provide the CookieService
*/
static forRoot(options: CookieOptions = {}): ModuleWithProviders {
return {
ngModule: CookieModule,
providers: [
{provide: COOKIE_OPTIONS, useValue: options},
{provide: NgxCookieMonsterService, useFactory: ngxCookieMonsterFactory, deps: [NgxCookieMonsterProvider]},
{provide: APP_BASE_HREF, useValue: '/'}
]
};
}
}
cookie-monster.service.spec.ts
import {Injector} from '@angular/core';
import {getTestBed, TestBed} from '@angular/core/testing';
import {CookieModule} from '../lib';
import {NgxCookieMonsterService} from "./ngx-cookie-monster.service";
describe('NgxCookieMonsterService', () => {
let injector: Injector;
let cookieService: NgxCookieMonsterService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
CookieModule.forRoot({})
]
});
injector = getTestBed();
cookieService = injector.get(NgxCookieMonsterService);
});
it('should be defined', () => {
expect(NgxCookieMonsterService).toBeDefined();
expect(cookieService).toBeDefined();
expect(cookieService instanceof NgxCookieMonsterService).toBeTruthy();
});
});
Когда я настраиваю свой TestBed
, он вызывает метод, который обеспечивает APP_BASE_HREF
, так почему я не получаю провайдера?
Редактировать Я пытался указать APP_BASE_HREF
внутри beforEach
, та же ошибка.