检测Jasmine测试何时完成

10

我像这样运行jasmine测试;

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

我想使用JavaScript检测测试何时完成。我该如何做?

4个回答

6

如@Xv所建议的,添加一个报告人会起作用。您可以做一些简单的事情:

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

请查看http://jasmine.github.io/2.2/custom_reporter.html了解更多信息。


5

一些替代方法:

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

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

您可以同时有多个报告器处于活动状态 jasmineEnv.addReporter()

B) 没有尝试过,但您可以创建自己的报告器,其中包含每个公共方法的空实现,但不包括 jasmineDone()

C) 检查 Jasmine 谷歌组中的一个旧帖子,在那里作者保存并覆盖了 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();

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也可以实现此功能。我的策略是轮询“finished-at” span元素中的文本内容。在此示例中,我每隔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 );

谢谢,这太棒了。我正在使用它来在测试后运行代码,以便从堆栈跟踪中创建链接返回到IntelliJ Idea。 - vaughan

1

我正在使用带有HtmlReporter的Jasmine 1.3.1。最终,我是这样连接的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接