Skip to content
Support the exports interface for Gemini
JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
README.md
package.json

README.md

Gemini Exports

Index

Description

Плагин для Gemini, реализующий поддержку интерфейса exports для тестов: вместо обращения к API Gemini, файл теста может экспортировать объект-декларацию.

Интерфейс обратносовместим со стандартными сценариями, использующими API Gemini. Это позволяет распологать файлы тестов, использующих различные интерфейсы, в одной директории.

Using

Просто экспортируй декларацию кейса, а плагин сформирует из неё тест-сьют:

module.exports = {
    suiteName: 'My Suite',
    selector: '.my-block',
    url: '/pathname',
    capture(actions, find) {
        actions.click(find('.my-block__elem'));
    }
}

Эквивалентно:

gemini.suite('My Suite', (suite) => {
    suite
        .setUrl('/pathname')
        .setCaptureElements('.my-block')
        .capture((actions, find) => {
            actions.click(find('.my-block__elem'));
        });
});

Nested Suites

Интерфейс поддерживает декларацию дочерниих сьютов. Дочерние сьюты наследуют значения полей url и selector, которые могут быть переопределены. Также наследуются хуки before и after, но при указании их в дочернем сьюте они будут дополнены, а не переопределены.

Пример использования:

module.exports = {
    // Не будет выполнено никаких действий, потому что нет capture
    suiteName: 'Parent suite',
    url: '/some/path',
    selector: '.selector1',
    before(actions, find) {
        // ...
    },
    after(actions, find) {
        // ...
    },
    childSuites: [
        {
            suiteName: 'Child suite #1',
            // переопределяет url; selector наследуется из родительского
            url: '/another/path',
            // Порядок выполнения: сначала родительский блок before, потом свой
            before(actions, find) {
                // ...
            },
            // Порядок выполнения: сначала свой блок after, потом родительский
            after(actions, find) {
                // ...
            },
            capture() {}
        },
        {
            suiteName: 'Child suite #2',
            // переопределяет selector; url наследуется из родительского
            selector: '.selector2',
            // будут выполнены родительские блоки before (до capture) и after(после capture)
            capture() {}
        }
    ]
};

Suite Declaration:

Описание ключей декларации:

{string} suiteName

Имя сьюта.


{string[]|string} [selector]

Селектор DOM-элемента или массив селекторов, скриншоты которых будут проверяться.

По-умолчанию: '*' вся страница.


{URL|string} [url]

URL для открытия.

По-умолчанию: '/'.


{string[]|string} [ignore]

Селектор DOM-элемента или массив селекторов, которые будут проигнорированы при сравнении.


{Function} [before]

Функция, выполняющаяся до выполнения capture, но после открытия страницы, указанной в url.


{Function|Object} [capture]

Функция capture, на случай если стандартная не устраивает. Если передан объект, то ключ это название (например "plain"), а значение это функция для capture.


{Function} [after]

Функция, выполняющаяся после выполнения capture.


{Object[]} [childSuites]

Массив дочерних сьютов.


{string[]|string|RegExp} [browsers]

Запускать тесты только в определенных браузерах.


{boolean|Object|Object[]} [skip]

Выключает тест.


{string|RegExp} [skip.browser]

Выключает тест для указанных браузеров.

По-умолчанию: /.*/.


{string} [skip.reason]

Позволяет указать причину выключения теста.


You can’t perform that action at this time.