Как автоматизировать модульные тесты для приложений Windows 8 HTML5?
Я пишу приложение для Windows 8 и пишу для него модульные тесты. Как я могу запустить их в автоматическом режиме в среде Windows 8?
Если я пишу очень простые файлы JavaScript, без каких-либо зависимостей от среды Windows 8 или DOM, я могу выполнить их модульное тестирование из командной строки с помощью Node.js. Это очень быстро (менее одной секунды).
Если мне нужно задействовать DOM, и я использую DOM для не слишком новых функций, я могу использовать jsdom в Node.js и получить ту же настройку и ту же скорость.
Но JSDOM неполный, и часто я хочу использовать основные функции Windows 8, такие как базовая библиотека WinJS (например, WinJS.Promise
) или Windows.*
Перечисления. И в идеале я должен тестировать в том же движке JS и среде DOM, в которой фактически будет работать мое приложение.
Так что в идеале мне нужен тестовый прогон: легкий контейнер Windows 8 HTML5, который может запускать некоторые модульные тесты с реальным DOM, и доступ к WinJS и Windows Runtime API. Для интеграции в процесс сборки мне также нужна возможность сообщать результаты обратно в командную строку (stdout, stderr) и изменять код возврата моего тестового бегуна в зависимости от успеха или неудачи. И он должен быть полностью автоматизирован, работать в фоновом режиме и быть очень быстрым (менее 10 секунд).
Я знаю, что есть такие инструменты для WebKit, например, PhantomJS. Существует ли такая вещь для среды выполнения Windows5 HTML5? Если нет, то какие API я должен изучить для создания чего-то подобного?
1 ответ
В настоящее время нет способа запустить набор тестов Win8/WinJS без использования функций. Среда выполнения, необходимая для приложений WinJS, не может быть установлена самостоятельно без запуска полноценного приложения WinJS.
Лучший способ запустить тесты, IME, это создать отдельный проект WinJS в вашем решении для запуска ваших тестов.
Кристофер Беннаж имеет пост в блоге, где описывается базовая настройка, здесь: http://dev.bennage.com/blog/2012/08/15/unit-testing-winjs/
И у меня есть несколько постов в блоге, которые идут чуть дальше по пути:
http://lostechies.com/derickbailey/category/winjs/
http://lostechies.com/derickbailey/2012/08/17/asynchronous-unit-tests-with-mocha-promises-and-winjs/
Если вам не нравится идея запуска отдельного проекта для ваших тестов, или если вы хотите использовать QUnit вместо Jasmine или Mocha, посмотрите QUnit-Metro: http://qunitmetro.github.com/QUnitMetro/ - он запускается в -проектировать с вашим реальным приложением, и дает вам контекстное меню в режиме разработки, чтобы запустить тесты для страницы, на которой вы находитесь.
Я не фанат QUnit или того, как QUnit-Metro работает на странице. Но вы можете найти его подходящим, если вам не нравится отдельный проект.
Надеюсь, это поможет.