私はこのようなジャスミンテストを実行しています。
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
jasmine.getEnv().execute();
テストが完了したときに、JavaScriptを使用して検出したいと思います。どうやって?
私はこのようなジャスミンテストを実行しています。
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
jasmine.getEnv().execute();
テストが完了したときに、JavaScriptを使用して検出したいと思います。どうやって?
@Xvとして。は、レポーターの追加が機能することを示唆しています。あなたは次のような簡単なことをすることができます:
jasmine.getEnv().addReporter({
jasmineDone: function () {
// the specs have finished!
}
});
いくつかの代替方法:
A)ConsoleRunner
オプションを受け入れるを使用しonComplete
ます。古いバージョン(1.2rc1)は、スタンドアロンパラメーターとして完全なコールバックを受け取ります。
()を書き込む関数も提供するoptions.print
ため、テストレポートをコンソールに書き込むことを制御できます。
複数のレポーターを同時にアクティブにすることができますjasmineEnv.addReporter()
。
B)試したことはありませんが、すべてのパブリックメソッドの実装を空にして、独自のレポーターを作成できますが、jasmineDone()
C) Jasmine googleグループの古い投稿を確認します。ここで、作成者は保存して上書きしますjasmine.getEnv().currentRunner().finishCallback
。
var oldCallback = jasmineEnv.currentRunner().finishCallback;
jasmineEnv.currentRunner().finishCallback = function () {
oldCallback.apply(this, arguments);
$("body").append( "<div id='_test_complete_signal_'></div" );
};
jasmineEnv.execute();
この問題を解決する2つの異なる方法を見つけました。1つは、ジャスミンをハックして、完了時にカスタムイベントをスローすることです。テストが読み込まれた後にスクレイピングをスクリーニングしたかったので、「reportRunnerResults」の最後にあるjasmine-html.jsにイベントトリガーを挿入しました
$( 'body' ).trigger( "jasmine:complete" );
次に、イベントをリッスンする必要があります。
$( 'body' ).bind("jasmine:complete", function(e) { ... }
私の場合、iFrameでjasmineを実行していて、結果を親ウィンドウに渡したいので、最初のバインドから親でイベントをトリガーします。
$(window.parent).find('body').trigger("jasmine:complete");
jqueryなしでこれを行うことも可能です。私の戦略は、「終了」スパンに追加されるテキストをポーリングすることでした。この例では、0.5秒ごとに8秒間ポーリングします。
var counter = 0;
function checkdone() {
if ( $('#test-frame' ).contents().find('span.finished-at').text().length > 0) {
...
clearInterval(timer);
} else {
counter += 500;
if (counter > 8000) {
...
clearInterval(timer);
}
}
}
var timer = setInterval( "checkdone()", 500 );
HtmlReporterを使用してJasmine1.3.1を実行しています。私はこのように引っ掛かることになりました:
var orig_done = jasmineEnv.currentRunner_.finishCallback;
jasmineEnv.currentRunner_.finishCallback = function() {
orig_done.call(this);
// custom code here
};