首页 > 解决方案 > 使用 Angular jasmine 测试获取请求返回未定义

问题描述

我有一个简单的方法,可以构造一个随机 url,例如(https://wqwqw.com/121212 ) 121212 是随机生成的。

getCall(url) {
   this.http.get(url)
}

在我的测试中我有

  it('test get', async (() => {
    let res;
    service.getCall('a').toPromise().then(x => {
      res = x
    })
   
    expect(res).toEqual(response) // res is undefined 
 
    const request = httpMock.expectOne('a') // errorr
    request.flush(res)
  }))

我期待随叫随到,但由于 url 是随机的,我不知道它是什么,但无论我说什么都说 ''expect 1 got none' const response = [{ data: 'string'}]

我不知道我做错了什么。

标签: angulartypescriptjasminekarma-jasmine

解决方案


您的期望检查将在您执行之后立即运行service.getCall,因此在 res 有机会被定义之前。您将需要确保在您的回调中运行测试检查(然后确保您的 Jasmine 测试等到该回调完成后再退出),或者明确指定您要等待调用完成。

由于您已经为测试指定了异步函数,因此我建议使用 await,这似乎也是Jasmine 文档中的首选方式。

  it('test get', async () => {
    const res = await service.getCall('a').toPromise()
   
    expect(res).toEqual(response)
 
    const request = httpMock.expectOne('a') // errorr
    request.flush(res)
  })

推荐阅读