TypeError: request.headers.entries is not a function

TypeError: request.headers.entries is not a function

我的代码已从请求 object 中的 headers 获取条目。 request 的类型是 Request

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

执行转译后的代码在浏览器环境中运行良好,但 运行 mocha 测试 returns

TypeError: request.headers.entries is not a function

我的 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
  }
}

编辑:
我的测试是用 typescript 编写的,它使用上面的 tsconfig 文件进行编译。
Mocha 版本:5.2.0
Typescript 版本: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");
    });
});

您正在使用基于 node-fetch.

isomorphic-fetch

当你 运行 在 node 中测试时,你实际上使用 RequestHeaders 等的 polyfill,而不是我们在浏览器。

所以实际在测试中使用的 Headers class 位于 node_modules/node-fetch/lib/headers.js 中,不幸的是它没有 entries 的实现。

我认为设置合适的浏览器环境进行测试是解决您的问题的最佳方法,但我没有这方面的经验,无法真正帮助您。