我正在尝试为我有很多导入内容的Angular 4/5
组件创建单元测试。但是在导入LocationStrategy之后,我得到了:
当我从LocationStrategy
导入@angular/common
时显示。
有我的spec.ts
文件:
student.component.spec.ts
import {TestBed, ComponentFixture, async} from '@angular/core/testing';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import {StudentComponent} from './student.component';
import {StudentService} from './student.service';
import {Student} from './student';
import {RecordsCount} from '../shared/entities/recordsCount';
import {Group} from '../groups/group';
import {GroupsService} from '../groups/groups.service';
import {NO_ERRORS_SCHEMA} from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { HttpHandler } from '@angular/common/http';
import { OverlayModule } from '@angular/cdk/overlay';
import { MainMaterialModule } from '../main-material.module';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { UpdateDeleteEntityService } from '../entity-table/update-delete-entity.service';
import { InfoModalService } from '../info-modal/info-modal.service';
import { ActivatedRoute } from '@angular/router';
import { Location, LocationStrategy } from '@angular/common';
describe('StudentComponent', () => {
let fixture: ComponentFixture<StudentComponent>;
let component: StudentComponent;
let mockRouter = {
navigate: jasmine.createSpy('navigate')
};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [StudentComponent],
schemas: [NO_ERRORS_SCHEMA],
imports: [MainMaterialModule, HttpClientTestingModule],
providers: [
StudentService,
GroupsService,
InfoModalService,
UpdateDeleteEntityService,
Location,
LocationStrategy,
{ provide: ActivatedRoute, useValue: mockRouter}]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(StudentComponent);
component = fixture.debugElement.componentInstance;
fixture.detectChanges();
});
it('should return array of students', () => {
const studentService = fixture.debugElement.injector.get(StudentService);
fixture.detectChanges();
const students: Student[] = [
{
userId: 20,
gradebookId: 'UX-3311221',
studentSurname: 'Лящовський',
studentName: 'Андрій',
studentFname: 'Іванович',
groupId: '2',
plainPassword: '',
photo: ''
}, {
userId: 13,
gradebookId: 'UY-3019273',
studentSurname: 'Заник',
studentName: 'Іван',
studentFname: 'Григорович',
groupId: '5',
plainPassword: '',
photo: ''
}, {
userId: 155,
gradebookId: 'UT-1029384',
studentSurname: 'Лінкольн',
studentName: 'Абрагім',
studentFname: 'Зимонсович',
groupId: '1',
plainPassword: '',
photo: ''
}];
const recordsCount: RecordsCount = {
numberOfRecords: '3'
};
const spy = spyOn(studentService, 'getStudentsRange').and.returnValue(Observable.of([students, recordsCount]));
component.getStudents();
expect(component.students).toEqual(students);
});
});
最佳答案
您可能已经找到了解决此问题的方法,但以防万一,并且可以使遇到相同问题的其他任何人受益。我遇到此问题,发现以下解决方案有效:
我认为问题在于LocationStrategy是一个抽象类,您需要提供一个扩展LocationStrategy的具体类,例如PathLocationStrategy。我将以下内容添加到我的提供商列表中{ provide: LocationStrategy, useClass: PathLocationStrategy },
然后,因为PathLocationStrategy依赖于APP_BASE_REF,所以我还为此添加了一个提供程序{ provide: APP_BASE_HREF, useValue: '/my/app'}
APP_BASE_HREF和PathLocationStrategy与@Location和LocationStrategy相同,是从@ angular/common导入的
关于angular - TypeError : this. _platformStrategy.getBaseHref不是函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47445810/