jestjs - Jest spyOn mockReturnValue 正在返回未定义的值
问题描述
我有一个奇怪的错误,在使用 JestspyOn
并模拟返回值时,该对象的值返回为未定义。
import { Location as LocationAPI } from '../index'
import REST from '../../MafRestApi'
const mockCoordinatesArray = [{'longitude': 116.0654299154163, 'latitude': -33.85910894972095, 'altitude': 1182.5}]
it('Calls the Location Coordinates API and gets a response', () => {
jest.spyOn(REST, 'get').mockReturnValue(Promise.resolve(mockCoordinatesArray))
return LocationAPI.getLocationCoordinates()
.then((results) => {
expect(results).toEqual(mockCoordinatesArray)
})
})
这些LocationAPI.getLocationCoordinates()
方法如下所示:
getLocationCoordinates (): Promise<Array<LocationCoordinates>> {
return REST.get(`${ENDPOINTS.LOCATION}`)
.then((coordinates) => coordinates.map((coordinate) => new LocationCoordinates(coordinate)))
}
这spyOn
是成功拦截。
Jest 的输出结果为:
Error: expect(received).toEqual(expected)
Expected value to equal: [{"altitude": 1182.5, "latitude": -33.85910894972095, "longitude": 116.0654299154163}]
Received:[{"altitude": undefined, "latitude": undefined, "longitude": undefined}]
我对另一个 API 调用使用了完全相同的签名,它工作正常。
为什么键会在值不完整的情况下保持完整?
解决方案
你的有问题getLocationCoordinates
。getLocationCoordinates
没有返回coordinates
您的代码中的映射。
尝试这个:
getLocationCoordinates(): Promise<Array<LocationCoordinates>> {
return new Promise((resolve) => {
REST.get(`${ENDPOINTS.LOCATION}`).then((coordinates) => {
const mappedCoordinates = coordinates.map((coordinate) => new LocationCoordinates(coordinate))
resolve(mappedCoordinates);
});
});
}
或使用async/await
:
async getLocationCoordinates(): Promise<Array<LocationCoordinates>> {
const coordinates = await REST.get(`${ENDPOINTS.LOCATION}`);
return coordinates.map((coordinate) => new LocationCoordinates(coordinate));
}
推荐阅读
- typescript - 如何从请求中返回用户对象
- gpu - A: 在 IMX6 上使用 vivante GPU 和 4.14 内核
- mongodb - 具有多个分组依据的MongoDB聚合
- python-3.x - i am getting AttributeError: 'NoneType' object has no attribute 'find_all'
- node.js - 如何根据聚合结果进行计算?
- javascript - add image in javascript
- c# - How do I make my bomb destroy all enemies in a certain radius?
- json - how to compress JSON data in vertx
- swift - Cannot delete EKCalendar, get Error Domain=EKErrorDomain Code=72
- python - Python中嵌套for循环的向量化