import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule, FormsModule } from '@angular/forms'; import { NgZorroAntdModule, NzModalService } from 'ng-zorro-antd'; import { of } from 'rxjs/observable/of'; import { RouterLinkStubDirective, Router } from '../../../../../testing/router-stubs'; import { MatPanelHeaderComponent } from '../../../../shared/components/mat-panel-header/mat-panel-header.component'; import { MatResponse } from '../../../../shared/shared.model'; import { AnalysisService } from '../shared/analysis.service'; import { AnalysisListComponent } from './analysis-list.component'; describe('AnalysisListComponent', () => { let component: AnalysisListComponent; let fixture: ComponentFixture; // let getAnalysisListSpy: jasmine.Spy; let testAnalysisList: MatResponse; let analysisEl: HTMLElement; let alsSpy: AnalysisServiceSpy; testAnalysisList = { code: 200, data: { results: [{ id: 1, name: 'testName' }] }, message: 'hahahah' }; /** * 在组件中模拟服务方法1: * 建立一个服务类,用jasmine列出所有的请求或直接返回observable,推荐用该方法 */ class AnalysisServiceSpy { // getAnalysisList = jasmine.createSpy('getAnalysisList').and.callFake(_ => of(testAnalysisList)); getAnalysisList = jasmine.createSpy('getAnalysisList').and.returnValue(of(testAnalysisList)); } beforeEach(async(() => { const routerSpy = createRouterSpy(); /** * 模拟服务方法2: * 分别模拟用到的方法 */ // const analysisService = jasmine.createSpyObj('AnalysisService', ['getAnalysisList']); // getAnalysisListSpy = analysisService.getAnalysisList.and.returnValue(of(testAnalysisList)); TestBed.configureTestingModule({ imports: [ NgZorroAntdModule, FormsModule, ReactiveFormsModule ], declarations: [ AnalysisListComponent, MatPanelHeaderComponent, RouterLinkStubDirective ], providers: [ { provide: AnalysisService, useClass: AnalysisServiceSpy }, { provide: Router, useValue: routerSpy } ] }) .compileComponents().then(_ => { fixture = TestBed.createComponent(AnalysisListComponent); component = fixture.componentInstance; alsSpy = TestBed.get(AnalysisService); }); })); it('should not show analysis before OnInit', () => { expect(alsSpy.getAnalysisList.calls.any()).toBe(false, 'getAnalysisList not yet called'); }); it('should display analysis name', () => { fixture.detectChanges(); // ngOnInit() analysisEl = fixture.nativeElement.querySelector('.analysis-name'); expect(analysisEl.textContent).toBe('testName', 'success'); expect(alsSpy.getAnalysisList.calls.any()).toBe(true, 'getAnalysis not yet called'); }); }); function createRouterSpy() { return jasmine.createSpyObj('Router', ['navigate']); }