未指定内容编码时无法获取响应



我正在尝试测试cafe RequestLogger,然后记录api响应。但是当没有指定内容编码时,我似乎缺少了一些东西。

即使在等待很长时间后,它也不会在"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"看起来像一个缓冲区,如下面的代码段所示。

<缓冲器7b 22 6d 65 73 61 67 65。。。4973个字节>

你能帮我解决这个问题吗?我在这里做错了什么?

我试图在简单的网站上使用您的简化代码。看起来一切都如预期。预计request.response.body包含Buffer内容。请看一下https://testcafe.io/documentation/402769/reference/test-api/requestlogger/constructor#header文章,并注意logResponseBodystringifyResponseBody部分。

我准备了一个样本,证明你的方法在一般情况下是正确的。请看:

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团队进一步研究您的问题,请在以下链接中创建一个复制该问题的示例:https://github.com/DevExpress/testcafe/issues/new?assignees=&labels=类型%3A+错误&template=bug_report.yaml

最新更新