Я пытаюсь проверить этот простой модуль API:Почему этот макет api работает не так, как ожидалось?
import fetch from 'isomorphic-fetch';
export const getJson = (endpoint: string) => {
const options = { credentials: 'include', method: 'GET' };
return fetch(endpoint, options)
.then(response => response.json()
.then(json => {
if (response.ok) return json;
return Promise.reject(json.errors);
})
)
.catch(error => {
if (error.constructor === Array) return error;
return [error.message];
});
};
С помощью этого теста, где я насмешливо выборки:
import { getJson } from '../api';
const mockResponse = (status, statusText, response) => {
return new window.Response(response, {
status: status,
statusText: statusText,
headers: {
'Content-type': 'application/json'
}
});
};
describe('api middleware',() => {
describe('getJson',() => {
it('should return the response on success',() => {
const expected = { data: ['data'], meta: {} };
const body = JSON.stringify(expected);
window.fetch = jest.fn().mockImplementation(() =>
Promise.resolve(mockResponse(200, null, body)));
return getJson('http://endpoint').then(actual => expect(actual).toEqual(expected));
});
});
});
Но тест не пройден с:
Expected value to equal:
{"data": ["data"], "meta": {}}
Received:
["Unexpected end of JSON input"]
Difference:
Comparing two different types of values:
Expected: object
Received: array
Я не смог понять, почему это не работает. Почему я получаю сообщение об ошибке «Неожиданный конец ввода JSON»? И как я могу успешно исправить выборку локально в тесте? В this medium post это делается в основном таким же образом.
Я имел издеваться над 'изоморфного-fetch' в корневом каталоге проекта Если я удалю, что результат теста:.' [ "запрос HTTP:// конечная точка не удалась, причина: getaddrinfo Конечная точка конечной точки ENOTFOUND: 80 "]'. Так что, похоже, шутка использовала этот макет автоматически. Однако выборка еще не была заменена моей макетной реализацией. – vkjb38sjhbv98h4jgvx98hah3fef
Возможно, вам придется использовать 'global' вместо' window'. –