10

我正在运行这样的茉莉花测试;

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

我想使用 JavaScript 检测测试何时完成。我怎样才能?

4

4 回答 4

6

作为@Xv。建议,添加记者将起作用。你可以做一些简单的事情:

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

请参阅http://jasmine.github.io/2.2/custom_reporter.html

于 2015-06-02T17:40:42.497 回答
5

一些替代方法:

A)使用ConsoleRunner, 接受一个onComplete选项。旧版本 ( 1.2rc1 ) 接收完整的回调作为独立参数。

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

您可以同时激活多个记者jasmineEnv.addReporter()

B)没有尝试过,但您可以创建自己的报告器,每个公共方法的实现都是空的,但是jasmineDone()

C)查看Jasmine google group 中的旧帖子,作者保存并覆盖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();
于 2013-07-10T05:57:55.493 回答
4

我找到了两种不同的方法来解决这个问题。一种是破解 jasmine 在完成时引发自定义事件。因为我想在加载测试后进行屏幕抓取,所以我将事件触发器插入到“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 );
于 2011-05-13T12:56:48.513 回答
1

我正在使用 HtmlReporter 运行 Jasmine 1.3.1。我最终像这样挂了:

var orig_done = jasmineEnv.currentRunner_.finishCallback;
jasmineEnv.currentRunner_.finishCallback = function() {
    orig_done.call(this);
    // custom code here
};
于 2013-12-02T02:57:57.317 回答