2011-05-12 80 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 
};