【发布时间】:2020-04-18 16:43:06
【问题描述】:
我了解如何模拟对服务的函数调用。
虽然我的 MainService 只是几个其他服务的包装器。
export class MainService {
constructor(
public service1: Service1,
public service2: Service2,
public service3: Service3
){}
我的组件注入 MainService,例如调用 this.mainService.service2.getUsers()。
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [MyComponent],
providers: [
FormBuilder,
{
provide: MainService,
useValue: jasmine.createSpyObj('MainService', [
'getUsers'
])
}
],
schemas: [NO_ERRORS_SCHEMA]
})
fixture = TestBed.createComponent(MyComponent)
})
我创建了模拟 MainService 的 spyObject 并添加了 getUsers 函数,我认为这不起作用,因为 getUsers 函数不直接在 MainService 上。我该怎么做。
【问题讨论】:
-
jasmine.createSpyObj应该模拟MainService的公共方法。一旦你这样做了,如果正确地模拟,你不应该担心其他三个服务的依赖关系。 -
@AliF50 MainService 没有公共方法。不是直接将 service2 注入我的组件,而是注入 MainService,然后调用 this.mainService.service2.getUsers() 访问 service2
标签: javascript angularjs angular jasmine