TestCafe检查API响应始终通过

时间:2019-07-08 10:29:31

标签: api automated-tests e2e-testing web-testing testcafe

我有一个testcafe测试,该测试检查API响应JSON是否有匹配的字符串,并且无论响应JSON中的内容是什么,该测试始终会通过。

我正在运行Gherkin / Testcafe集成。最后一个“然后”步骤是检查API响应JSON正文。

logger = RequestLogger(config.serverUrl + '/api/v1/service', {
        logResponseHeaders: true,
        logResponseBody: true,
    });
    await t
        .addRequestHooks(logger)
        .navigateTo(config.serverUrl + '/admin/integrations')
        .expect(logger.contains(record => record.response.statusCode === 200))
        .ok();

    await t
        .expect(
            logger.contains(async record => {
                // console.log(record.response.headers);
                const body =
                    record.response.headers['content-encoding'] === 'gzip'
                        ? await getBody(record.response.body)
                        : record.response.body.toString();
                const bodyJson = JSON.parse(body);
                return bodyJson.filter(node => node.title === "Devtest").length == 1;
            })
        )
        .ok();

最后,代码应根据是否找到至少一个包含“ Devtest”的项目来返回true / false。

但是,无论数字是多少,测试始终会通过。

1 个答案:

答案 0 :(得分:2)

RequestLogger不支持predicate函数的contains参数的异步函数。 因此,这种期望始终会通过-await t.expect(logger.contains(async record => false)).ok()。 要解决此问题,我建议您将代码分成两个参数:

const record = request.records.find(r => ...);
const body = record.response.headers['content-encoding'] === 'gzip'
             ? await getBody(record.response.body)
             : record.response.body.toString();

const bodyJson = JSON.parse(body);

await t.expect(bodyJson.filter(node => node.title === "Devtest").length === 1).ok();

我还看到自动解压缩响应正文的功能可以简化您的测试代码。如果有时间,您可以尝试实现此功能,并在TestCafe repository中打开拉取请求。