Testcafe: Как проверить POST параметры запроса - PullRequest
0 голосов
/ 18 октября 2018

На странице, которую я тестирую, при нажатии кнопки создается запрос POST ajax.Я хотел бы проверить правильность параметров, отправляемых в этом запросе.Как бы я поступил об этом?

Это то, что я попробовал:

import {RequestLogger, Selector} from '../../../node_modules/testcafe';

const requestUrl = 'http://localhost:8080/mypage/posttarget';
const logger = RequestLogger({url: requestUrl, method: 'post'}, {logRequestBody: true, logRequestHeaders: true});


fixture `Notifications`.page('http://localhost:8080/mypage')
  .requestHooks(logger);

test('notification request contains id', async t => {
  await t
    .click('#submit-notification')
    .expect(logger.request.body.id)
    .eql(1)
  ;
});

Но logger.request не определен.Также logger.requests.length равен 0.

Буду признателен, если кто-нибудь покажет мне, как я могу проверить тело запроса?

1 Ответ

0 голосов
/ 19 октября 2018

Объект RequestLogger имеет свойство requests, представляющее собой массив зарегистрированных запросов, но не один запрос.Я попытался воспроизвести проблему с пустым свойством requests, но оно работает, как и ожидалось.Пожалуйста, проверьте следующий тестовый код:

import { RequestLogger } from 'testcafe';

const requestUrl = 'https://demos.devexpress.com/aspxgridviewdemos/gridediting/EditForm.aspx';
const logger = RequestLogger({ url: requestUrl, method: 'post' }, { logRequestBody: true, logRequestHeaders: true });


fixture `Notifications`.page('https://demos.devexpress.com/aspxgridviewdemos/gridediting/EditForm.aspx')
    .requestHooks(logger);

test('notification request contains id', async t => {
    await t.click('#ContentHolder_grid_DXEFL_DXCBtn9');
    await t.expect(logger.requests[0].request.body).ok();
});

UPD.Я обнаружил разницу между:

await t.click('#ContentHolder_grid_DXEFL_DXCBtn9');
await t.expect(logger.requests[0].request.body).ok();

и

await t
    .click('#ContentHolder_grid_DXEFL_DXCBtn9')
    .expect(logger.requests[0].request.body).ok();

Второй случай не работает, потому что нам нужно дождаться полной обработки запроса, и поэтому нам нужнодобавить await перед утверждением

...