Я пытаюсь получить набор асинхронных тестов QUnit для запуска из скрипта сборки Ant, используя PhantomJS . То, что у меня есть, похоже, работает, но, похоже, должен быть более хороший способ добиться этого.
Сценарий (упрощенный), который запускается при загрузке PhantomJS, выглядит следующим образом:
var page = require("webpage").create();
page.onConsoleMessage = function(msg) {
if(msg.indexOf("FINISHED") > -1) {
var failed = msg.split(" ");
phantom.exit(failed[1]);
}
};
page.open("testrunner.html", function() {
page.evaluate(function() {
QUnit.done = function(result) {
console.log("FINISHED " + result.failed);
};
});
});
Загружает файл, содержащий тесты (testrunner.html
). Он использует метод PhantomJS evaluate
для запуска некоторого кода в контексте загруженной страницы. Этот код связывает обработчик события с событием QUnit done
. В обработчике событий все, что происходит, это простой вызов console.log
.
PhantomJS по умолчанию ничего не делает с вызовами console.log
, поэтому я также связал обработчик событий с событием PhantomJS onConsoleMessage
. Когда выполняется вызов console.log
в обработчике события QUnit.done
, запускается событие onConsoleMessage
. Если консольное сообщение соответствует заданной строке, то мы знаем, что тесты завершены. Затем мы можем выйти из PhantomJS с кодом завершения, равным количеству неудачных модульных тестов (это используется скриптом Ant для определения того, была ли эта часть сборки успешной).
У меня вопрос: есть ли лучший способ узнать, когда завершены модульные тесты?