等待后如何测试数据

How to test data after await

我正在尝试添加一个测试来测试以下代码部分,但我不确定如何添加,因为输出显示第 60-109 行未被覆盖。它看起来像这样:

public async ngOnInit() {
  const data = await this.requestAppService.getData()
  this.tableModel =  { // Line 60
    ...this.tableModel,
    rows: data.map(
      /*
      * Map data
      */
    )
  }

  this.subscriptions.push(
    /* Add a subscription */
  )
  // Line 109
}

我正在使用的测试如下所示:

it('...', fakeAsync(() => {
  const spy = spyOn(component, 'ngOnInit').and.callThrough()
  component.ngOnInit()
  tick()
  expect(spy).toHaveBeenCalled()
}))

这只是我认为我应该如何测试它的猜测,但它似乎没有涵盖所有内容。 我也试过callFake,也没用

it('...', fakeAsync(() => {
  const spy = spyOn(component, 'ngOnInit').and.callFake(() => Promise.resolve())
  component.ngOnInit()
  tick()
  expect(spy).toHaveBeenCalled()
}))

问题出在 spyOn 语句上。您正在监视 ngOnInit 函数。您必须监视该服务的 getData 功能。

注入并使用 requestAppService 实例,如下所示,

it('...', fakeAsync(() => {
  const spy = spyOn(requestAppService, 'getData').and.callThrough()
  component.ngOnInit()
  tick()
  expect(spy).toHaveBeenCalled()
}))

如果你想让getData给你一些模拟datapromise

it('...', fakeAsync(() => {
      const spy = spyOn(requestAppService, 'getData').and.callFake(() => {
      return new Promise((resolve) => {
        resolve(YOUR_OBJECT);
      });
      component.ngOnInit()
      tick()
      expect(spy).toHaveBeenCalled()
 }))