2016-02-12 26 views
1

我需要能夠在瀏覽器中執行摩卡測試。不使用cli工具通過終端在瀏覽器中運行測試。從字面上看,瀏覽器中的所有內容。目標是在用戶點擊一個按鈕後運行規格。在瀏覽器中定義摩卡規格

我已經在瀏覽器中正確安裝了mocha,但有一些緩存行爲令我困惑。

https://plnkr.co/edit/nuZZyD5EsMtpgP66HtW5?p=preview

的HTML:

<div id="mocha"></div> 
<button id="test">run test</button> 

的JS:

(function(init, $, runner) { 
    init(); 
    $('#test').addEventListener('click', runner) 
})(
    function init() { 
     mocha.setup('bdd'); 
    }, 
    function $(sel) { 
     return document.querySelector(sel); 
    }, 
    function specRunner(e) { 
     describe('test at ' + new Date().getTime(), function() { 
      it('should add 1 + 1', function() { 
       chai.assert(1 + 1 === 2, 'added 1 + 1'); 
      }); 
     }); 
     mocha.run(); 
    } 
) 

其他測試工具我曾經使用過(qunit,茉莉,因果報應,量角器)所有這些都會鼓勵(強制?)用戶在跑步者開始之前定義所有的規格編輯。這與我試圖實現的目的相反:以編程方式定義規格,而不是在運行時定義規格。

在plnkr中,似乎摩卡正在緩存先前的規格,然後在每次點擊時運行所有規格。我怎樣才能解決這個問題?

+0

爲什麼你需要在你的網站上執行測試? –

+0

,因爲這是一個奇怪的邊緣情況下,使用webdriver不是首選。最終的目標是在擴展中添加一個「spec runner」。我只是不想推出我自己的測試庫。 –

+0

我不知道你的確切情況,但我真的會阻止你做這樣的事情。不過,我發佈了一個答案(我認爲)可以解決您的問題。 –

回答

0

我認爲這wors您預期的那樣:

(function(init, $, runner) { 
    init(); 
    $('#test').addEventListener('click', runner) 
})(
    function init() { 
     mocha.setup('bdd'); 
     describe('test at ' + new Date().getTime(), function() { 
      it('should add 1 + 1', function() { 
       chai.assert(1 + 1 === 2, 'added 1 + 1'); 
      }); 
     }); 
    }, 
    function $(sel) { 
     return document.querySelector(sel); 
    }, 
    function specRunner(e) { 
     mocha.run(); 
    } 
) 

的問題是你定義的測試單擊該按鈕每一次,但你只需要一次定義它,只有在運動員運行。

希望這可以幫到你