4

当社は、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テストを実行する可能性があるため)、これは実際には有効なソリューションではありません。

何が悪いのかについて何か考えはありますか?この問題をデバッグするのに他にどのような情報が役立つかわかりませんが、要求に応じて提供します。私は困惑しています(特に「エラーの解析」がエラーメッセージの中で最も有用ではないため)。

編集: これは、次の2つのWebKitの問題に関連しているようです。

サーバーでGZIP圧縮をオフにすると、問題なく動作するように見えますが、それでもこの問題についてさらに調査する必要があります。

4

1 に答える 1

8

これはPhantomJSのバグです:http ://code.google.com/p/phantomjs/issues/detail?id = 930&start = 300

回避策は、今のところGZIP圧縮をオフにすることです(または、サーバーをだまして圧縮コンテンツを送信しないように、Phantomから偽のacceptヘッダーを送信します)。

于 2013-01-18T22:23:59.993 に答える