Наша компания хочет запустить наши модульные тесты QUnit через наш CI-сервер и рассматривает PhantomJS как средство достижения этой цели. Мы начали с того, что просто попытались открыть пару наших тестовых страниц QUnit в фантоме с помощью следующего скрипта:
var page = require('webpage').create();
var args = require('system').args;
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};
page.onError = function(msg, trace) {
var msgStack = ['ERROR: ' + msg];
if (trace) {
msgStack.push('TRACE:');
trace.forEach(function(t) {
msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function + '")' : ''));
});
}
console.error(msgStack.join('\n'));
};
page.open(args[1], function(status) {
phantom.exit();
});
Ничего особенного, почти дословно скопировано со справочных страниц phantomJS. Но, увы, это иногда приводит к следующему результату:
ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:
ERROR: SyntaxError: Parse error
TRACE:
Я копался в этом, и «ошибка синтаксического анализа» связана с тем, что PhantomJS считает, что переменная jQuery не инициализирована, но дело в том, что страницы, которые я пытаюсь загрузить в PhantomJS, прекрасно работают в Chrome, IE и Firefox, так что там нет ошибки синтаксического анализа, которую я вижу (код для загрузки jQuery - это скучный тег SCRIPT в верхней части тега HEAD, так что там нет ничего интересного).
Если это имеет какое-то значение, наши тесты находятся внутри страниц ASP.NET (aspx), обслуживаемых либо встроенным сервером разработки VS2010, либо IIS8 Express, либо IIS 6. Мой следующий шаг — превратить их в чистый HTML, чтобы посмотреть, будет ли фантом все еще жалуются, но это не совсем правильное решение, поскольку загрузка страниц ASPX будет требованием в дальнейшем (для потенциального выполнения автоматических тестов пользовательского интерфейса с использованием Phantom).
Любые идеи о том, что не так? Не уверен, какие еще фрагменты информации будут полезны для отладки этой проблемы, но я предоставлю их по запросу. Я в тупике (особенно потому, что «ошибка синтаксического анализа» — не самое полезное из сообщений об ошибках).
Редактировать: похоже, это связано со следующими двумя проблемами WebKit:
Если я отключу сжатие GZIP на нашем сервере, все будет работать нормально, но мне еще предстоит провести дальнейшее исследование этой проблемы.