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

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 文章并关注 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 团队进一步研究您的问题,请在以下 link 创建一个重现该问题的示例: https://github.com/DevExpress/testcafe/issues/new?assignees=&labels=TYPE%3A+bug&template=bug_report.yaml