Тестовый порядок Mocha по файлам и постоянство экземпляра webdriverjs

Я тестирую свое веб-приложение с Mocha и WebDriver. Я борюсь с лучшими практиками в отношении тестового заказа Mocha и постоянного состояния драйвера.

Я хочу разделить тесты на разные файлы, например.

test\
    index.js
    selenium\
        login.js
        search.js

Таким образом, при выполнении login.js должен быть первым, потому что он входит в приложение и проходит аутентификацию. Только после этого можно делать search.js. Но как? В login.js у меня теперь есть это:

webdriverjs = require('webdriverjs');

describe 'UI/Selenium', ->
    client = {}

    before ->
        client = webdriverjs.remote
            desiredCapabilities:
                browserName: 'chrome'

        client.init()
        client.windowHandleSize({width: 1920, height: 1080})

    it 'should let us login', (done) ->
        client.url('http://127.0.0.1:1337/login')
        .setValue('#username', 'username')
        .setValue('#password', 'password')
        .buttonClick('button[type="submit"]')
        .waitFor '#search_results_user', 5000, (err) -> throw err if err
        .call done

Как я могу сохранить состояние клиента для других тестов без необходимости его повторной инициализации каждый раз? И как мне определить порядок выполнения файлов с Mocha?


person nhaa123    schedule 30.04.2014    source источник


Ответы (1)


Как я могу сохранить состояние клиента для других тестов без необходимости его повторной инициализации каждый раз?

Вы настраиваете все, чем хотите поделиться между тестами, в хуке before (и удаляете его в хуке after). Это будет означать перемещение кода в вашем тесте для входа в ваш хук before. Предположим, вы тестируете представление «foo», вы можете сделать:

describe("foo view", function () {
    before(function () { /* create selenium driver */ });

    describe("when used by a logged in user", function () {
        before(function () { /* log in */ });

        it(...

        it(...

        after(function () { /* log out */ });
    });

    describe("when used by a logged out user", function () {
        it(...

        it(...
    });
    after(function () { /* shut down the driver */ });
});

И как мне определить порядок выполнения файлов с Mocha?

Тесты Mocha не должны зависеть друг от друга и, следовательно, не должны зависеть от порядка их выполнения.

Если вы находитесь в ситуации, когда вы должны нарушить это кардинальное правило, вы можете просто вызвать Mocha из командной строки со списком тестовых файлов в нужном вам порядке. Или вы можете запустить Mocha программно и использовать addFile для добавления файлов по порядку. .

person Louis    schedule 30.04.2014
comment
Есть как минимум две веские причины, по которым требуется определенный порядок тестовых файлов. 1) вы просто хотите, чтобы отчет был в определенном порядке для чтения людьми и 2) у вас могут быть тесты для имитации (например, фиктивный API, который перехватывает настоящие HTTP-вызовы), которые необходимо пройти, прежде чем другие тесты будут безопасны для продолжения, и макеты — это именно то, от чего зависят другие тесты. - person neverfox; 29.11.2014