我们公司希望通过我们的CI服务器开始触发我们的QUnit单元测试,并将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的代码是HEAD标记顶部的一个无聊的SCRIPT标记,所以没有什么令人兴奋的。)
如果它有所不同,我们的测试是在ASP.NET(aspx)页面内,通过VS2010内置开发服务器,IIS8 Express或IIS 6提供。我的下一步是将它们转换为纯HTML以查看如果幻影仍然会抱怨,但这并不是一个真正有效的解决方案,因为加载ASPX页面将是一个进一步的要求(可能使用Phantom进行自动UI测试)。
关于什么是错的任何想法?不确定哪些其他信息对调试此问题有用,但我会按要求提供它们。我很难过(特别是因为“解析错误”并不是最有用的错误消息)。
修改 这似乎与以下两个WebKit问题有关:
如果我在我们的服务器上关闭GZIP压缩它似乎工作正常,但我仍然需要进一步研究这个问题。
答案 0 :(得分:8)
这是PhantomJS中的一个错误:http://code.google.com/p/phantomjs/issues/detail?id=930&start=300
解决方法是暂时关闭GZIP压缩(或从Phantom发送虚假接受标头以欺骗服务器不发送压缩内容)。