Javascript 检测茉莉花测试何时完成

Javascript 检测茉莉花测试何时完成,javascript,jasmine,Javascript,Jasmine,我正在进行这样的测试 jasmine.getEnv().addReporter(new jasmine.TrivialReporter()); jasmine.getEnv().execute(); 我想使用JavaScript检测测试何时完成。我该怎么办?我找到了两种不同的方法来解决这个问题。一种是让jasmine在自定义事件完成时抛出自定义事件。因为我想在加载测试后筛选scrape,所以在“reportRunnerResults”的末尾将事件触发器插入到jasmine-html

我正在进行这样的测试

   jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
   jasmine.getEnv().execute();

我想使用JavaScript检测测试何时完成。我该怎么办?

我找到了两种不同的方法来解决这个问题。一种是让jasmine在自定义事件完成时抛出自定义事件。因为我想在加载测试后筛选scrape,所以在“reportRunnerResults”的末尾将事件触发器插入到jasmine-html.js中

然后是倾听事件:

$( 'body' ).bind("jasmine:complete", function(e) { ... }
在我的例子中,我在iFrame中运行jasmine,希望将结果传递给父窗口,因此我从第一次绑定开始在父窗口中触发一个事件:

$(window.parent).find('body').trigger("jasmine:complete");
也可以在没有jquery的情况下执行此操作。我的策略是投票选出要添加到“finished at”跨度中的文本。在本例中,我每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 );
一些替代方法:

A)使用,它接受
onComplete
选项。旧版本()作为独立参数接收完整回调

由于您还提供了写入(
options.print
)的功能,因此您可以控制将测试报告写入控制台

您可以同时激活多个报告程序
jasmineEnv.addReporter()

B)还没有尝试过,但是您可以创建自己的reporter,使用每个公共方法的空实现,但
jasmineDone()

C)检查一个旧的,作者保存并覆盖
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();
var oldCallback=jasmineEnv.currentRunner().finishCallback;
jasmineEnv.currentRunner().finishCallback=函数(){
oldCallback.apply(这个,参数);

$(“body”).append(“我正在用HtmlReporter运行Jasmine 1.3.1。我最终像这样连接到:

var orig_done = jasmineEnv.currentRunner_.finishCallback;
jasmineEnv.currentRunner_.finishCallback = function() {
    orig_done.call(this);
    // custom code here
};

正如@Xv.所建议的那样,添加一名记者是可行的。您可以做一些简单的事情,如:

jasmine.getEnv().addReporter({
    jasmineDone: function () {
        // the specs have finished!
    }
});

请参阅。

谢谢,这很好。我正在使用它在测试后运行代码,从堆栈跟踪创建回IntelliJ Idea的超链接。
jasmine.getEnv().addReporter({
    jasmineDone: function () {
        // the specs have finished!
    }
});