未指定内容编码时无法获得响应
Unable to get the response when content-encoding is not specified
我正在尝试测试 cafe RequestLogger,然后记录 api 响应。
但是当未指定内容编码时,我似乎遗漏了一些东西。
return 'getLoggerBody' 方法的 'else' 部分中没有任何内容,即使等待了很长时间。
这是我的代码:
import { RequestLogger } from 'testcafe';
import { get } from "lodash";
import zlib from "zlib";
export const getLogger = (url, method = 'GET') => RequestLogger(url, { logResponseBody: true, logResponseHeaders: true });
export const getLoggerResponseBody = logger => {
const request = logger.requests[0];
const contentEncoding = get(request, ['response', 'headers', 'content-encoding']);
if (contentEncoding && contentEncoding === 'gzip') {
const unzippedBody = zlib.gunzipSync(request.response.body);
return JSON.parse(unzippedBody.toString());
} else {
return JSON.parse(request.response.body.toString());
}
};
'request.response.body' 看起来像一个缓冲区,如下面的代码片段所示。
<Buffer 7b 22 6d 65 73 73 61 67 65 ... 4973 more bytes>
你能帮我解决这个问题吗?我在这里做错了什么?
我尝试在简单网站上使用您的简化代码。看起来一切都按预期工作。预计 request.response.body
包含 Buffer
内容。请查看 https://testcafe.io/documentation/402769/reference/test-api/requestlogger/constructor#header 文章并关注 logResponseBody
和 stringifyResponseBody
部分。
我准备了一个样本来证明您的方法在一般情况下是正确的。请看:
import { RequestLogger } from 'testcafe';
export const getLogger = (url, method = 'GET') => RequestLogger(url, { logResponseBody: true, logResponseHeaders: true });
export const getLoggerResponseBody = logger => {
const request = logger.requests[0];
return request.response.body.toString();
};
const logger = getLogger(/.*/)
fixture `f`
.page `http://example.com`
.requestHooks(logger);
test('test', async t => {
await t.click('h1');
console.log(getLoggerResponseBody(logger));
});
如果您希望 TestCafe 团队进一步研究您的问题,请在以下 link 创建一个重现该问题的示例:
https://github.com/DevExpress/testcafe/issues/new?assignees=&labels=TYPE%3A+bug&template=bug_report.yaml
我正在尝试测试 cafe RequestLogger,然后记录 api 响应。 但是当未指定内容编码时,我似乎遗漏了一些东西。
return 'getLoggerBody' 方法的 'else' 部分中没有任何内容,即使等待了很长时间。
这是我的代码:
import { RequestLogger } from 'testcafe';
import { get } from "lodash";
import zlib from "zlib";
export const getLogger = (url, method = 'GET') => RequestLogger(url, { logResponseBody: true, logResponseHeaders: true });
export const getLoggerResponseBody = logger => {
const request = logger.requests[0];
const contentEncoding = get(request, ['response', 'headers', 'content-encoding']);
if (contentEncoding && contentEncoding === 'gzip') {
const unzippedBody = zlib.gunzipSync(request.response.body);
return JSON.parse(unzippedBody.toString());
} else {
return JSON.parse(request.response.body.toString());
}
};
'request.response.body' 看起来像一个缓冲区,如下面的代码片段所示。
<Buffer 7b 22 6d 65 73 73 61 67 65 ... 4973 more bytes>
你能帮我解决这个问题吗?我在这里做错了什么?
我尝试在简单网站上使用您的简化代码。看起来一切都按预期工作。预计 request.response.body
包含 Buffer
内容。请查看 https://testcafe.io/documentation/402769/reference/test-api/requestlogger/constructor#header 文章并关注 logResponseBody
和 stringifyResponseBody
部分。
我准备了一个样本来证明您的方法在一般情况下是正确的。请看:
import { RequestLogger } from 'testcafe';
export const getLogger = (url, method = 'GET') => RequestLogger(url, { logResponseBody: true, logResponseHeaders: true });
export const getLoggerResponseBody = logger => {
const request = logger.requests[0];
return request.response.body.toString();
};
const logger = getLogger(/.*/)
fixture `f`
.page `http://example.com`
.requestHooks(logger);
test('test', async t => {
await t.click('h1');
console.log(getLoggerResponseBody(logger));
});
如果您希望 TestCafe 团队进一步研究您的问题,请在以下 link 创建一个重现该问题的示例: https://github.com/DevExpress/testcafe/issues/new?assignees=&labels=TYPE%3A+bug&template=bug_report.yaml