Jest spyOn mockReturnValue возвращает неопределенные значения - PullRequest
1 голос
/ 20 мая 2019

У меня странная ошибка, при которой при использовании Jest spyOn и насмешке над возвращаемым значением значение этого объекта возвращается как неопределенное.

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, и он работает нормально.

Почему ключи остаются неповрежденными там, где нет значений?

1 Ответ

0 голосов
/ 20 мая 2019

В вашем 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...