我的代码从Request对象的标题中获取条目。
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
  }
}


编辑:
我的测试是使用TypeScript编写的,该脚本使用上述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");
    });
});

最佳答案

您正在使用基于isomorphic-fetchnode-fetch

在节点中运行测试时,实际上使用的是Request提供的Headersnode-fetch等填充,而不是浏览器中的本机填充。

因此,测试中使用的实际Headers类位于node_modules/node-fetch/lib/headers.js中,不幸的是,其实现中没有entries

我认为设置适当的浏览器环境进行测试将是解决您问题的最佳解决方案,但我在此主题上没有经验,也无法为您提供帮助。

09-10 06:59
查看更多