Testcafe проверяет API-ответ всегда проходит - PullRequest
3 голосов
/ 08 июля 2019

У меня есть тест testcafe, который проверяет ответ JSON API на наличие совпадающей строки, и независимо от того, что находится в ответе JSON, тест всегда проходит.

Я выполняю интеграцию Gherkin / Testcafe.Последний шаг «Затем» - проверка тела JSON ответа API.

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();

В конце код должен возвращать значение true / false в зависимости от того, найден или не найден хотя бы один элемент, содержащий «Devtest».

Тем не менее, тест всегда проходит независимо от того, какое число.

1 Ответ

2 голосов
/ 08 июля 2019

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 .

...