角度测试,仅构建其他服务的模拟服务

时间:2020-04-18 16:43:06

标签: javascript angularjs angular jasmine

我了解如何模拟对服务的函数调用。

尽管我遇到的情况是我的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上。我该怎么做。

1 个答案:

答案 0 :(得分:0)

尝试:

const mockMainService = {
  service1: {
    // mock service 1 public methods and properties here,
  },
  service2: {
    getUsers: () => {....},
    // mock service 2 public methods and properties here,
  },
  service3: {
    // mock service 3 public methods and properties here.
  }
};
beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [MyComponent],
      providers: [
        FormBuilder,
        {
          provide: MainService,
          useValue: mockMainService,
        }
      ],
      schemas: [NO_ERRORS_SCHEMA]
    })
    fixture = TestBed.createComponent(MyComponent)
  })