我正在测试angular(1.6.3)中的服务 我的服务依赖于另一项服务。 每次运行ng test时,我都不会获得ServiceName或HTTpclient的提供程序 有帮助吗??? 服务:
export class TraitsService {
constructor(private gs: GenericService) {}
getAll(callback: Function) {
this.gs
.callGet(`${environment.serviceURL}${environment.serviceConfigAPI.getMyTraits}?active=true`)
.subscribe(traits => callback(this.flatten(traits)));
}
测试:
describe('TraitsService', () => {
let service: TraitsService;
let gs: GenericService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [TraitsService, GenericService]
});
service = TestBed.get(TraitsService);
gs = TestBed.get(GenericService);
});
it('should be created', inject([TraitsService], (service: TraitsService) => {
expect(service).toBeTruthy();
}));
答案 0 :(得分:1)
Official Documentation中对此进行了广泛处理,但是开始时可能有些吓人。 :)
正如文档所指出的那样,您可以通过多种方法进行测试。我个人倾向于监视原始服务,以孤立地测试正在考虑的服务。我为您整理了Stackblitz,以说明如何在您的情况下进行此操作。
通过该Stackblitz,这是.spec文件中的describe()
函数:
describe('TraitsService', () => {
const mockReturnValue = [1, 2, 3]; // change this!
const gsSpy = jasmine.createSpyObj('GenericService', ['callGet']);
gsSpy.callGet.and.returnValue(of(mockReturnValue));
let service: TraitsService;
// let gs: GenericService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
TraitsService,
{ provide: GenericService, useValue: gsSpy }
]
});
service = TestBed.get(TraitsService);
// gs = TestBed.get(GenericService);
});
it('should be created', inject([TraitsService], (service: TraitsService) => {
expect(service).toBeTruthy();
}));
});
您可以在Stackblitz中看到该服务创建正确。我希望这会有所帮助。