Ошибка типа: request.headers.entries не является функцией - PullRequest
0 голосов
/ 14 сентября 2018

Мой код получает записи из заголовков в объекте Request.request имеет тип Запрос

let headers = {};
for (const pair of request.headers.entries()) {
    headers[pair[0]] = pair[1];
}

Выполнение переданного кода работает нормально в среде браузера, но выполнение тестов mocha возвращает

TypeError: request.headers.entries не является функцией

Мой файл tsconfig:

{
  "compilerOptions": {
    "module": "commonjs",
    "noEmitOnError": true,
    "noImplicitAny": false,
    "moduleResolution": "node",
    "removeComments": false,
    "sourceMap": true,
    "downlevelIteration": true,
    "target": "es5",
    "lib": ["es7", "dom", "dom.iterable"],
    "declaration": true
  }
}

Редактировать: Мои тесты написаны на машинописном тексте, который использует вышеуказанный файл tsconfig для компиляции.Мокко версия: 5.2.0Версия машинописного текста: 2.2.1

Мой фактический код:

export const getHeaders = (request: Request): Record<string, string> => {
    let headers = {};
    for (const pair of request.headers.entries()) {
        headers[pair[0]] = pair[1];
    }
    return headers;
}

Мой тест:

describe("getHeaders", function() {
    it('Should return headers', () => {
        let req = new Request("/testurl", {
            method: "GET",
            headers: new Headers({"test": "test"})
        })
        assert.equal(getHeaders(req).test, "test");
    });
});

1 Ответ

0 голосов
/ 14 сентября 2018

Вы используете isomorphic-fetch, который основан на node-fetch.

Когда вы запускаете тесты в узле, вы фактически используете полифилы Request, Headers и т. Д., Предоставляемые node-fetch вместо собственных, которые есть в браузерах.

Таким образом, фактический класс Headers, используемый в тестах, находится в node_modules/node-fetch/lib/headers.js и, к сожалению, в его реализации нет entries.

Я думаю, что правильная среда браузера для тестирования будет лучшим решением вашей проблемы, но у меня нет опыта в этой теме, и я не могу вам в этом помочь.

...