angular - 使用 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'}]
我不知道我做错了什么。
解决方案
您的期望检查将在您执行之后立即运行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)
})
推荐阅读
- javascript - 如何在js中从css中列出@font-face
- react-native - 如何在 Expo-av 中同步播放多个音频文件?
- reactjs - 我的 Reactjs 程序不断执行 useEffect 挂钩,而我希望它只执行一次
- python - 获取与数组元素相同的行的 DataFrame 索引
- javascript - 我正在制作一个 Discordjs 机器人,并希望能够在不让机器人脱机的情况下更新代码
- javascript - 使用 puppeteer 在本地下载网站,无需 Javascript
- tensorflow - 我正在尝试使用 Mask RCNN 构建对象检测,并在调用 MaskRCNN 方法时出错
- css - 使用固定容器内的 div 中的溢出内容控制滚动条放置
- svg - SVG 图像嵌入到图形中。以 SVG 导出图形时,有没有办法保持其 SVG 格式?
- matlab - 复倒谱 Matlab