我正在运行jasmine这样的测试;
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
jasmine.getEnv().execute();
我想在测试完成时使用JavaScript检测。我怎么能?
答案 0 :(得分:5)
一些替代方式:
A)使用接受onComplete
选项的ConsoleRunner
。旧版本(1.2rc1)将完整回调作为独立参数接收。
由于您还提供了写入(options.print
)的功能,因此您可以控制将测试报告写入控制台。
您可以同时让多名记者活跃jasmineEnv.addReporter()
。
B)尚未尝试,但您可以创建自己的记者,每个公共方法的空实现,但jasmineDone()
C)检查作者保存并覆盖jasmine.getEnv().currentRunner().finishCallback
的旧post in the Jasmine google group:
var oldCallback = jasmineEnv.currentRunner().finishCallback;
jasmineEnv.currentRunner().finishCallback = function () {
oldCallback.apply(this, arguments);
$("body").append( "<div id='_test_complete_signal_'></div" );
};
jasmineEnv.execute();
答案 1 :(得分:5)
作为@Xv。建议,添加记者将工作。你可以做一些简单的事情:
jasmine.getEnv().addReporter({
jasmineDone: function () {
// the specs have finished!
}
});
答案 2 :(得分:4)
我找到了两种不同的方法来解决这个问题。一种是破解茉莉花在完成时抛出自定义事件。因为我想在加载测试后屏幕抓取,我在“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 );
答案 3 :(得分:1)
我正在使用HtmlReporter运行Jasmine 1.3.1。我最终像这样挂钩:
var orig_done = jasmineEnv.currentRunner_.finishCallback;
jasmineEnv.currentRunner_.finishCallback = function() {
orig_done.call(this);
// custom code here
};