testcafe для API-теста - как проверить код ответа с помощью специального requesthook - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь написать пример теста в testcafe для проверки кода ответа API.

Ниже мой код

import { RequestHook } from 'testcafe';

class JwtBearerAuthorization extends RequestHook {
  constructor () {
    super();
  }

  onRequest (e) {
    e.requestOptions.headers['Authorization'] = 'some token';
    e.requestOptions.headers['Content-Type'] = 'application/json';
  }

  onResponse (e) {

  }
}

const jwtBearerAuthorization = new JwtBearerAuthorization();

fixture `Fixture`
.page('http://mywebsite.com/api/example/learning_items')
.requestHooks(jwtBearerAuthorization);

test('basic', async t => {
  await t
   .expect(jwtBearerAuthorization.contains(r => r.response.statusCode === 200)).ok();
});

Я не уверен, как установить responseEventConfigureOpts в true.Документация не ясна, если я передам пользовательский заголовок [как аутентификация], как получить код ответа.

http://devexpress.github.io/testcafe/documentation/test-api/intercepting-http-requests/creating-a-custom-http-request-hook.html

Ответы [ 2 ]

0 голосов
/ 23 мая 2019
import { RequestHook } from 'testcafe';

const allResponces = {};

class Hook extends RequestHook {
  testName;  
    constructor (testName) {
      super();

        this.testName               = testName;
        allResponces[this.testName] = [];
    }

    async onRequest (e) {
        console.log('onRequest');
    }

    async onResponse (e) {
        console.log('onResponse');

        allResponces[this.testName].push(e);
    }
}

const getHook = (testName) => {
    return new Hook(testName);
};

fixture `Hook`
    .page `https://devexpress.github.io/testcafe/example`;


test('basic', async t => {
    await t.click('h1');
    await t.click('#developer-name');
    console.log(allResponces['basic'].length);
    await t.expect(allResponces['basic'].every(r => r.statusCode === 200)).ok();
}).requestHooks(getHook('basic'));
0 голосов
/ 09 октября 2018

responseEventConfigureOpts - это объект со свойствами includeHeaders и includeBody.Чтобы установить их, достаточно передать объект { includeHeaders: true/false, includeBody: true/false } в качестве второго параметра в конструкторе RequestHook.

Кроме того, вам не нужно писать какую-либо логику, связанную с ловушкой, из onRequest или onResponse методы.Посмотрите на эту документацию:

Метод onRequest вызывается перед отправкой запроса.Используйте этот метод для обработки отправки запроса.Вы можете изменить параметры запроса перед его отправкой.Когда ответ получен, ловушка начинает готовиться к вызову метода onResponse, который обрабатывает ответ.

Таким образом, вы можете проверить statusCode ответа в методе onResponse:

onResponse (e) {
    const code = e.statusCode;
}

UPD.

import { RequestHook } from 'testcafe';

const allResponces = {};

class Hook extends RequestHook {
    constructor (testName) {
        super();

        this.testName               = testName;
        allResponces[this.testName] = [];
    }

    onRequest (e) {
        console.log('onRequest');
    }

    onResponse (e) {
        console.log('onResponse');

        allResponces[this.testName].push(e);
    }
}

const getHook = (testName) => {
    return new Hook(testName);
};

fixture `Hook`
    .page `http://example.com`;


test('basic', async t => {
    await t.click('h1');
    await t.click('div');
    console.log(allResponces['basic'].length);
    await t.expect(allResponces['basic'].every(r => r.statusCode === 200)).ok();
}).requestHooks(getHook('basic'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...