2011-05-12 79 views

回答

4

我发现了两种不同的方法来解决这个问题。一种是在完成时劈开茉莉花来抛出一个自定义事件。因为我想屏幕刮试装后,我插入事件触发到茉莉花html.js在“reportRunnerResults”

$('body').trigger("jasmine:complete"); 

的末尾,则它侦听该事件的问题:

$('body').bind("jasmine:complete", function(e) { ... } 

在我的情况,我在一个iFrame正在运行茉莉,想要的结果传递给父窗口,所以我触发父事件,从我第一次绑定:

$(window.parent).find('body').trigger("jasmine:complete"); 

这也是possibl e不用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); 
+0

谢谢,这太棒了。我使用它在测试之后运行代码,以便从堆栈跟踪创建超链接返回到IntelliJ Idea。 – vaughan 2012-03-06 15:01:50

5

一些替代方法:

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

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

你可以同时有几个记者活跃jasmineEnv.addReporter()

B)没有尝试过,但你可以创建自己的记者,与每一个公共方法的空实现,但jasmineDone()

C)检查旧post in the 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(); 
+1

添加自定义记者的作品! – 2015-06-02 18:21:30

1

我正在用HtmlReporter运行Jasmine 1.3.1。我结束了这样的挂钩:

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