茉莉花:模拟父母班,这样我就可以隔离和测试儿子班

时间:2018-09-18 13:59:21

标签: angular jasmine angular-test testbed

我有以下情况:

export class HttpClientService extends Http {...}    
export class AppHttpClientService extends HttpClientService {...}

我想要的是将HttpClientService覆盖为模拟类,这样我就只能对AppHttpClientService上存在的函数进行测试。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

使用TestBed,您可以为服务提供模拟,例如HttpClientServiceMock

您的模拟可以是一个简单的类,例如声明:

class HttpClientServiceMock {
  get(url) {
    ...
  }
}

,然后使用TestBed.overrideComponent覆盖组件使用的服务。

示例:

TestBed.overrideComponent(AppHttpClientService, {
  set: {
    providers: [{ provide: HttpClientService, useValue: HttpClientServiceMock}]
  }
});

最后一个示例是重写服务。要对组件执行相同操作,您可以尝试:

TestBed.overrideComponent(ParentComponent, {
  set: {
    template: '<span>{{data}}</span>'
  }})
  .createComponent(ParentComponent);

这样,您将只使用想要的部分作为原始父组件在测试中使用。

现在,当您为子组件创建实例时,它将使用父组件的此覆盖版本。