我能够通过一个接一个地隔离模块来找到错误的测试。它看起来像这样:
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { Component, Input } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { DxBoxModule, DxListModule, DxToolbarModule } from 'devextreme-angular';
import { NGXLogger, NGXLoggerMock } from 'ngx-logger';
import { of } from 'rxjs';
import { CalendarDataStoreService } from '../../services/calendar-data-store.service';
import { ExampleCommunicationService } from '../../services/example-communication.service';
import { ExamplePageComponent } from './example-page.component';
@Component({selector: 'example-calendar-list', template: ''})
class ExampleCalendarListStubComponent {
@Input() dataSource;
@Input() selectedItem;
}
@Component({selector: 'example-toolbar', template: ''})
class ExampleToolbarStubComponent {
@Input() selectedCalendar;
}
describe('ExamplePageComponent', () => {
let component: ExamplePageComponent;
let fixture: ComponentFixture<ExamplePageComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
DxBoxModule,
RouterTestingModule,
DxListModule,
DxToolbarModule,
HttpClientTestingModule
],
declarations: [
ExamplePageComponent,
ExampleToolbarStubComponent,
ExampleCalendarListStubComponent
],
providers: [
{
provide: CalendarDataStoreService, useValue: {
createDataSource: () => {},
modified$: of(true)
}
},
{provide: ExampleCommunicationService, useValue: {}},
{provide: NGXLogger, useClass: NGXLoggerMock},
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ExamplePageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
xit('should create', () => {
expect(component).toBeTruthy();
});
});
生成提供程序的行是问题:
{
provide: CalendarDataStoreService, useValue: {
createDataSource: () => {},
modified$: of(true)
}
为提供者创建的 DataSource 导致 AfterAll() 在测试运行后失败。