Я пытаюсь протестировать мое приложение angular 8, используя primeng, но карма отображает следующую ошибку:
NullInjectorError: StaticInjectorError(DynamicTestModule)[ButtonDirective -> ElementRef]:
StaticInjectorError(Platform: core)[ButtonDirective -> ElementRef]:
NullInjectorError: No provider for ElementRef!
Я думаю, что это причина компонента кнопки primeng, действительно на его github (primeng / src / app / components / button / button.ts) мы получили это:
export class ButtonDirective implements AfterViewInit, OnDestroy {
@Input() iconPos: 'left' | 'right' = 'left';
@Input() cornerStyleClass: string = 'ui-corner-all';
public _label: string;
public _icon: string;
public initialized: boolean;
constructor(public el: ElementRef) {}
Я много чего пробовал, но ничего не получалось: '(
Я пробовал:
Вот мой app.component.spe c .ts:
import { TestBed, async, ComponentFixture } from '@angular/core/testing';
import {BrowserModule} from "@angular/platform-browser";
import {FormsModule, ReactiveFormsModule} from "@angular/forms";
// Import PrimeNG modules
import {
/**
PRIMENG IMPORTS
**/
ButtonModule
} from "primeng/primeng";
import { } from 'jasmine'
import { ElementRef } from '@angular/core';
export class MockElementRef extends ElementRef {
constructor() { super(null); }
// nativeElement = {};
}
describe('AppComponent', () => {
let component: AppComponent;
let fixture: ComponentFixture<AppComponent>;
let elRef: ElementRef;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
/**
LOTS OF MODULES
**/
ButtonModule,
],
declarations: [
/**
LOTS OF COMPONENTS
**/
],
providers: [
/**
LOTS OF SERVICES
**/
{ provide: ElementRef, useClass: MockElementRef },
// { provide: ElementRef, useValue: MockElementRef },
{ provide: APP_BASE_HREF, useValue: '/' },
{ provide: HTTP_INTERCEPTORS, useClass: HttpClientInterceptor, multi: true },
{ provide: HttpService, useFactory: httpClientCreator, deps: [HttpClient] }
]
}).compileComponents();
// elRef = TestBed.get(MockElementRef);
}));
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy()
});
});
Помогите мне, пожалуйста! (
* РЕДАКТИРОВАТЬ: *
app.module.ts:
// Import PrimeNG modules
import {
CalendarModule,
CheckboxModule,
ContextMenuModule,
DialogModule,
DropdownModule,
GrowlModule,
InputTextareaModule,
PaginatorModule,
PanelModule, SpinnerModule,
TabViewModule, ToolbarModule, TooltipModule, KeyFilterModule, ButtonModule
} from "primeng/primeng";
import {TableModule} from "primeng/table";
/**
LOTS OF IMPORTS
**/
// Enable production mode
enableProdMode();
@NgModule({
imports: [
/**
LOTS OF MODULES
**/
],
declarations: [
AppComponent,
/**
LOTS OF COMPONENTS
**/
],
bootstrap: [
AppComponent
],
providers: [
/**
LOTS OF SERVICES
**/
{ provide: APP_BASE_HREF, useValue: '/' },
{ provide: HTTP_INTERCEPTORS, useClass: HttpClientInterceptor, multi: true },
{ provide: HttpService, useFactory: httpClientCreator, deps: [HttpClient] }
]
})
export class AppModule {
}
* РЕШЕНО: *
Путем добавления «preserveSymlinks»: true в angular. json в «тестовой» секунде раздел вместо "сборки" работал ... довольно глупо с моей стороны