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 中测试时,你实际上使用 Request
、Headers
等的 polyfill,而不是我们在浏览器。
所以实际在测试中使用的 Headers
class 位于 node_modules/node-fetch/lib/headers.js
中,不幸的是它没有 entries
的实现。
我认为设置合适的浏览器环境进行测试是解决您的问题的最佳方法,但我没有这方面的经验,无法真正帮助您。
我的代码已从请求 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 中测试时,你实际上使用 Request
、Headers
等的 polyfill,而不是我们在浏览器。
所以实际在测试中使用的 Headers
class 位于 node_modules/node-fetch/lib/headers.js
中,不幸的是它没有 entries
的实现。
我认为设置合适的浏览器环境进行测试是解决您的问题的最佳方法,但我没有这方面的经验,无法真正帮助您。