如何使用Angle-Spectator测试嵌套的依存关系

时间:2019-11-27 19:02:15

标签: angular unit-testing jasmine angular-directive

我有一个角度组件正在使用依赖于另一个服务(service2)的服务(service1)。

我该如何测试?我想模拟两种服务。

export class service2 {
    public someFunction() {}

    constructor() {}
}


export class service1 {
    public somOtherFunction() {}
    constructor(s: Service2) {
         this.s.someFunction();
    }
}

@Component({
    selector: 'component',
    providers: [Service1],

 })
 export class component {
    constructor(private service:Service1) {
        this.service.someOtherFunction();
    }
 }   

我的测试台看起来像这样。

describe('component', () => { 
    let component: Spectator<component>;
    const createComponent = createComponentFactory();

    beforeEach(() => component = createComponent());

   it('should create', () => {
     expect(component).toBeTruthy();
   });
});

相当标准,但是我无法弄清楚如何模拟服务。 谁能帮忙??

1 个答案:

答案 0 :(得分:0)

更新

根据我们是否提供组件级别或模块级别的服务,我们可以通过componentProviders: []providers:[]覆盖并实质上模拟它们

请尝试以下操作:

class MockedService1 {

  someOtherFunction() {
    return 'Some stubbed values';
  }
}

const createComponent = createComponentFactory({
  component: YourComponentUnderTest,
  componentProviders: [
    { provide: Service1, useClass: MockedService1 },
    // { provide: Service2, useClass: Service2 }
  ],
  imports: []
});

如果依赖关系层次结构为Component -> Service1 -> Service2,则在模拟Service1时,我们不必模拟Service2。