Подтвердить что ты не робот

Использование мокко-phantomjs для автоматизации функционального тестирования

В моем проекте используются: Node, Coffeescript, SocketIO, Browserify и Mocha. (мокка для стандартных серверных тестов)

Я хотел бы автоматизировать некоторые проверки интерфейса на стороне клиента с помощью браузера без браузера. PhantomJS выглядел как идеальный выбор (выбрал Zombie из-за поддержки веб-сокетов).

Страницы PhantomJS предупреждают, что это не тестовый бегун, который я понимаю, и они рекомендуют использовать проект mocha-phantomjs для тестирования ваших тестов.

Итак, я смог запустить тестовые тесты (например, mocha-phantomjs tests/mixed.html), но моя текущая проблема на самом деле использует PHANTOM в тестах. Все тестовые тесты в репозитории mocha-phantomjs, по-видимому, используют стандартный серверный сервер mocha unit test.

например. Я могу легко запустить mocha-phantomjs tests/mixed.html, чтобы просмотреть скучные старые модульные тесты. Или я могу запустить phantomjs tests/login.coffee, чтобы загрузить мой экран входа... но как я могу объединить эти два, чтобы сделать утверждения о том, что я должен ожидать на моем экране входа?

Я не могу найти никаких примеров этого в Интернете, и я боюсь с пониманием лучшего способа сделать это.

Надеюсь, что все это имеет смысл. Заранее благодарим за любую помощь.

UPDATE. Я нашел следующее предложение автора (здесь), но я не совсем понимаю, что делать с it: phantomjs lib/mocha-phantomjs.coffee test/mixed.html

4b9b3361

Ответ 1

Там довольно хороший учебник для тестирования с Mocha и Phantom.JS здесь.

Раздел о Mocha и PhantomJS является коротким, но основная идея состоит в том, чтобы поместить утверждения DOM и взаимодействия в ваш тестовый набор Mocha, запустить его на стороне клиента через файл testrunner.html, а затем указать mocha-phantomjs на файл testrunner.html.

Чтобы перефразировать, ваш тест Mocha может выглядеть следующим образом:

describe("DOM Test", function () {

    var el = document.createElement("div");
    el.id = "myDiv";
    el.innerHTML = "Hello World!";
    document.body.appendChild(el);
    var myEl = document.getElementById('myDiv');

    it("has the right text", function () {
        (myEl.innerHTML).should.equal("Hello World!");
    });
});

И файл testrunner.html будет обычной настройкой:

<html>
    <head>
        <title> Tests </title>
        <link rel="stylesheet" href="./node_modules/mocha/mocha.css" />
    </head>
    <body>
        <div id="mocha"></div>
        <script src="./node_modules/mocha/mocha.js"></script>
        <script src="./node_modules/chai/chai.js"></script>
        <script>
            mocha.ui('bdd');
            mocha.reporter('html');
            var should = chai.should();
        </script>
        <script src="test/test.js"></script>
        <script>
            if (window.mochaPhantomJS) { mochaPhantomJS.run(); }
            else { mocha.run(); }
        </script>
    </body>
</html>

Если вы предпочитаете, чтобы решение полностью запускалось из экосистемы node.js, стоит рассмотреть Zombie.JS. Это переполнение стека question дает базовый пример.

Компромисс заключается в том, что, хотя Zombie.JS можно использовать просто, требуя модуль node, и он чрезвычайно быстрый, он не является "настоящим" веб-браузером. PhantomJS ближе, так как он основан на webkit. Кроме того, первый подход с мокко-phantomjs позволит вам запускать тесты Mocha на стороне клиента в разных браузерах по вашему выбору, PhantomJS является лишь одним из них.