【问题标题】:How to test data after await等待后如何测试数据
【发布时间】:2020-07-29 15:48:59
【问题描述】:

我正在尝试添加一个测试来测试以下代码部分,但我不确定如何,因为输出表明行 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()
}))

【问题讨论】:

    标签: javascript angular jasmine karma-jasmine


    【解决方案1】:

    问题在于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()
     })) 
    

    【讨论】:

    • 这仍然表明行 60-109 未被覆盖。
    • 你可以像expect(component.tableModel.length ).toBe( data's length)这样写断言。如果通过了,那么您可以确认我的解决方案正在运行。那么你需要做的就是编写正确的断言或期望语句.....
    • 是的,callThrough() 是对的。我更新了我的答案...
    • 如果您编写正确的期望语句,60-109 将自动被覆盖。但是你有一个基本的问题是监视ngOninit 钩子。您可以通过删除60-109 行来验证它,而不是只编写一些基本代码。这样您就会明白getData 实际上会为您提供模拟数据,并且会执行和覆盖更多行。
    • 这似乎奏效了,现在它已经到达行88-109
    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2016-08-24
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多