2013-11-27 203 views
3

我想在執行一堆測試用例時終止所有其餘的測試用例。如何終止摩卡測試運行?

我正在用ui界面(在瀏覽器上)使用摩卡。

我如何強制終止測試運行?

呼叫mocha.run()有什麼東西正好相反。像'mocha.stopRun()'。我在文檔中找不到任何東西。

+0

你是從命令行還是在瀏覽器中運行mocha? – Louis

+0

瀏覽器 – codeofnode

+0

裏面我找不到在摩卡來源任何會認爲這是可能的:( – robertklep

回答

1

我還沒有找到由mocha導出的公開API,要求它在任意位置終止套件。但是,在撥打mocha.run()之前,您可以撥打mocha.bail(),讓摩卡在測試失敗後立即停止。如果你希望能夠有沒有故障,杜絕甚至,這裏有一個辦法做到這一點:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8"/> 
    <link href="node_modules/mocha/mocha.css" type="text/css" media="screen" rel="stylesheet" /> 
    <script type="text/javascript" src="node_modules/mocha/mocha.js"></script> 
    </head> 
    <body> 
    <button id="terminate">Terminate Mocha</button> 
    <div id="mocha"></div> 
    <script> 
     var terminate = document.querySelector("#terminate"); 
     var runner; 
     var terminated = false; 
     terminate.addEventListener("click", function() { 
      if (runner) { 
       // This tells the test suite to bail as soon as possible. 
       runner.suite.bail(true); 
       // Simulate an uncaught exception. 
       runner.uncaught(Error("FORCED TERMINATION")); 
       terminated = true; 
      } 
      return false; 
     }); 

     mocha.setup("bdd"); 
     describe("test", function() { 
      this.timeout(5 * 1000); 
      it("first", function (done) { 
       console.log("first: do nothing"); 
       done(); 
      }); 
      it("second", function (done) { 
       console.log("second is executing"); 
       setTimeout(function() { 
        // Don't call done() if we forcibly terminated mocha. 
        // If we called done() no matter what, then if we terminated 
        // the run while this test is running, mocha would mark it 
        // as failed, and succeeded! 
        if (!terminated) 
         done(); 
       }, 2.5 * 1000); 
      }); 
      it("third", function (done) { 
       console.log("third: do nothing"); 
       done(); 
      }); 
     }); 
     runner = mocha.run(); 
    </script> 
    </body> 
</html> 

如果單擊「終止摩卡」按鈕,而摩卡忙於第二個測試,它會導致第二次測試失敗並且第三次測試不會執行。您可以通過查看控制檯中的輸出來驗證這一點。

如果您想以此作爲停止自己的測試套件的方法,您可能希望使用由「終止摩卡」按鈕運行的代碼註冊異步操作,以便儘快終止這些操作,如果可能的話。請注意,runner.suite.bail(true)不是公共API的組成部分。我已經嘗試起初撥打mocha.bail(),但在測試運行中調用它不起作用。 (只有在致電mocha.run()之前撥打電話纔有效。)runner.uncaught(...)也是私人的。

+0

感謝..可以ü請回答問題以及http://stackoverflow.com/questions/20328172/how-to-get-information-of-mocha-test-type-object – codeofnode

-1

您將要查找摩卡進程,然後使用節點的process.kill

+1

什麼爲摩卡的幫助做的瀏覽器,而不是在命令行? – codeofnode