2012-06-14 3 views
8

Tworzę bibliotekę javascript i chcę używać BDD, więc próbuję użyć mocha i nie mogę tego zrobić. Chcę, aby ta biblioteka była używana na kliencie, więc zakładam, że to ma sens, aby uruchamiać ją z adresu URL do przeglądania, być w kontekście połączenia internetowego, a nie tylko piaskownicy z nieokreślonej ścieżki.dlaczego mocha w przeglądarce wyłapuje globalny wyciek z adresu URL, ale nie z niekodowanej ścieżki?

oto test dummy punktem wyjścia plik/test.foobar.js

var assert = chai.assert; 

var foobar = { 
    sayHello: function() { 
    return 'Hello World!'; 
    } 
}; 

describe('Foobar', function() { 
    describe('#sayHello()', function() { 
     it('should work with assert', function() { 
     assert.equal(foobar.sayHello(), 'Hello World!'); 
    }); 

    }); 
}); 

i tutaj jest strona HTML, która uruchamia test, test.html

<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Mocha Tests</title> 
    <link rel="stylesheet" href="testing/mocha.css" /> 
    <script src="testing/jquery.js"></script> 
    <script src="testing/mocha.js"></script> 
    <script>mocha.setup('bdd')</script> 
    <script src="testing/chai.js"></script> 
    <script src="test/test.foobar.js"></script> 
    <script> $(function() { mocha.run(); }) </script> 
</head> 
<body> 
    <div id="mocha"></div> 
</body> 
</html> 

gdy otwieram w chrom lub safari

file:///Users/me/dev/sandbox/test.html 

to działa zgodnie z oczekiwaniami, testy przechodzą bez błędu

kiedy otwarte w Chrome lub Safari

http://localhost/sandbox/test.html 

pojawia się następujący błąd, a test nie

Error: global leak detected: script1339700707078 
    at Runner.checkGlobals (http://localhost/sandbox/testing/mocha.js:3139:21) 
    at Runner.<anonymous> (http://localhost/sandbox/testing/mocha.js:3054:44) 
    at Runner.emit (http://localhost/sandbox/testing/mocha.js:235:20) 
    at http://localhost/sandbox/testing/mocha.js:3360:14 
    at Test.run (http://localhost/sandbox/testing/mocha.js:3003:5) 
    at Runner.runTest (http://localhost/sandbox/testing/mocha.js:3305:10) 
    at http://localhost/sandbox/testing/mocha.js:3349:12 
    at next (http://localhost/sandbox/testing/mocha.js:3233:14) 
    at http://localhost/sandbox/testing/mocha.js:3242:7 
    at next (http://localhost/sandbox/testing/mocha.js:3192:23) 

może ktoś ma wyjaśnienia, a lepsze rozwiązanie?

Odpowiedz

0

znalazłem rozwiązanie, które rozwiązuje ten problem w safari ... zastępując

<script> $(function() { mocha.run(); }) </script> 

przez

<script> 
     onload = function(){ 
     var runner = mocha.run(); 
     }; 
</script> 

... ale nadal pojawia się błąd w Chrome :-(

+2

Jeśli dodać następujące w tagu skrypt powyżej onload jednym, powinien to naprawić w Chrome (globalne użyteczne w ogóle zbyt): mocha.setup ({Ui: 'BDD', globals : ['script *']}) –

6

To był problem z używaniem jQuery z mocha jQuery tworzy globalne zmienne, które mają unikalny identyfikator ... w twoim przypadku script133.... Ostatnio wydany w mocha 1.2 możesz skonfigurować ldcard ignoruje ...

$(function(){ 
    mocha 
    .globals([ 'script*' ]) // acceptable globals 
    .run(); 
}); 

Upewnij się, że jesteś aktualny i odpowiednio skonfiguruj.

referencyjne: Mocha 1.2.0 launch notice

Powiązane problemy