StaticInjectorError(DynamicTestModule)[MatTable -> ChangeDetectorRef]: StaticInjectorError(Platform: core)[MatTable -> ChangeDetectorRef]: NullInjectorError: No provider for ChangeDetectorRef!
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MessagesComponent } from './messages.component';
import { NgModule,CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA} from '@angular/core';
import { MatTableModule } from '../../../MessageUtility/node_modules/@angular/material';
import { HttpClientModule } from '@angular/common/http';
import { RouterTestingModule } from '@angular/router/testing';
describe('MessagesComponent', () => {
let component: MessagesComponent;
let fixture: ComponentFixture<MessagesComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ MessagesComponent ],
imports:[HttpClientModule,RouterTestingModule,MatTableModule, ],
schemas: [NO_ERRORS_SCHEMA,NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MessagesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});





Используете ли вы ChangeDetectionStrategy.OnPush в качестве стратегии обнаружения изменений? ChangeDetectorRef фактически предоставляется фикстуре, как объяснено здесь.
Если вы определили ChangeDetectorRef как один из ваших личных атрибутов в вашем компоненте следующим образом:
constructor(private cdr: ChangeDetectorRef) { }
Поскольку он является частным, вы должны создать шпион в качестве заглушки для этого атрибута в своем тестовом файле и проверить, вызывается ли ChangeDetectorRef. Просто смоделируйте CDR в вашем файле .spec, выполнив следующие действия:
it('test CDR', () => {
const spyCDR = spyOn((component as any).cdr, 'detectChanges');
component.method();
expect(spyCDR).toHaveBeenCalled();
});
Другой подход заключается в предоставлении всех необходимых методов ChangeDetectorRef как части вашей декларации TestBed.configureTestingModule.
Например, если ваш код (или третья библиотека, как в вашем случае) использует метод detectChanges экземпляра ChangeDetectorRef, вы можете предоставить его, как в следующем примере:
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
// other providers here
{ provide: ChangeDetectorRef, useValue: { detectChanges: () => { } } }
]
});
});
Можете ли вы добавить код