Реализуем requestHooks в огурце / testCafe - PullRequest
2 голосов
/ 08 мая 2019

Когда я хочу добавить requestHooks (например) к своему тесту и устройству, я в основном не знаю, где это сделать.

Я использую этот репо https://github.com/rquellh/testcafe-cucumber

Ответы [ 3 ]

3 голосов
/ 09 мая 2019

Я нахожу решение. однако он нестабилен: иногда он выдает ошибку: «[object DOMException]: \ n Нет доступной трассировки стека». Может кто знает почему? Код (после создания объекта mock и logger, как в документе testCafe):

When('I log in as free user', async () => {
    await testController.addRequestHooks(mock)
    await testController.addRequestHooks(logger)
    await testController.wait(2000)
    await testController
        .click(selector)
        .typeText(selector,string, {replace : true})
        .typeText(selector,string, {replace: true})
        .click(selector);
});

ОБНОВЛЕНИЕ: теперь это работает с функцией wait (), но, может быть, есть более элегантный ответ на этот вопрос?

2 голосов
/ 08 мая 2019

testController доступно с шагом Given, When, Then.Таким образом, вы можете использовать стандартные методы тестового контроллера: addRequestHooks и removeRequestHooks .

Я изменил пример из репозитория https://github.com/rquellh/testcafe-cucumber, чтобы продемонстрироватьRequestLogger использование.

const {Given, When, Then} = require('cucumber');
const Role = require('testcafe').Role;
const RequestLogger = require('testcafe').RequestLogger;
const githubPage = require('../support/pages/github-page');

const logger = new RequestLogger('https://github.com');

Given(/^I open the GitHub page$/, async function() {
    await testController.addRequestHooks(logger);
    await testController.navigateTo(githubPage.github.url());
});

...
Then(/^Logger should contain captured request information$/, async function() {
    await testController.expect(logger.contains(record => record.response.statusCode === 200)).ok();
});

...
0 голосов
/ 07 июня 2019

Мое решение (gherkin-testcafe: ^ 2.2.0):

Определение:

Feature: Check server names

Scenario Outline: Fetch pages
    Given there is the <url>
    When I check the response status
    Then the http <prameter> equals the <value>

    Examples:
        | url                    | prameter | value |
        | https://www.seznam.cz  | server   | nginx |
        | https://www.google.com | server   | gws   |

И реализация:

const {Given, When, Then} = require('cucumber');
const {RequestLogger} = require('testcafe');

let logger;
Given(/there is the (.+)/, async (t, [url]) => {
    logger = RequestLogger(url, {
        logResponseHeaders: true,
    });
    await t.addRequestHooks(logger);
    await t.navigateTo(url);
});

When(/I check the response status/, async t => {
    await t.expect(logger.contains(record => record.response.statusCode === 200)).ok();
});

Then(/the http (.+) equals the (.+)/, async (t, [name, value]) => {
    await t.expect(logger.contains(record => record.response.headers.server === value)).ok();
});
...